Xerte – tworzymy szablon quizu

Xerte - tworzymy szablon quizuArtykuł jest niejako odpowiedzią na rosnące zainteresowanie programem Xerte (a szczególnie dokumentacją do niego w języku polskim). Xerte to w pełni funkcjonalne środowisko open source do tworzenia interaktywnych kursów e-learningowych. Oprogramowanie posiada dosyć przystępny system tworzenia oraz dystrybucji szablonów.

Struktura szablonów opiera się na języku XML, więc pewne umiejętności programistyczne będą mile widziane. Plik szablonu można modyfikować ręcznie bądź skorzystać z kreatora szablonów (który należy wcześniej odpowiednio przygotować). Jakiekolwiek zmiany będziemy wprowadzać w późniejszym czasie, wystarczy jedynie modyfikować plik *.xml.

Całość artykułu powstała w oparciu o dokumentację, którą możesz ściągnąć z oficjalnej strony Xerte.

Za chwilę stworzymy od podstaw szablon Quizu, w skład którego będą wchodzić następujące elementy: logo (bądź dowolne tło graficzne), tekst wprowadzający (tzw. intro) oraz grupa pytań z różnymi opcjami do wyboru. Część opcji będzie błędna, a pozostałe będą poprawne, natomiast użytkownik będzie mógł zobaczyć wynik quizu. Wszystkie dane wymagane do utworzenia quizu będą zawarte w pliku xml. W trakcie projektowania szablonu nie wiemy dokładnie ile pytań w ostateczności będzie znajdować się w naszym quizie oraz jak dużo opcji im przypiszemy. Xerte pobiera dane z pliku xml i tworzy właściwą treść w oparciu o informacje, które znajdują się w tym pliku.

Kiedy już utworzysz gotowy szablon będziesz modyfikować jedynie plik xml. Jest to o wiele łatwiejsze niż tworzenie całego projektu od podstaw. Plik xml zawiera tylko te informacje, które mogą podlegać różnym modyfikacjom, zasada samego działania pozostaje niezmienna.

Każda ręczna modyfikacja pliku niesie za sobą pewien margines błędu, dlatego warto stworzyć kreatora, dzięki któremu nie będziemy się martwić czy w pliku zabrakło jakiejś linijki bądź brakuje np. tagu zamykającego. Xerte pozwala w prosty sposób edytować plik xml za pomocą kreatora szablonu (arkusza stylów).

Etap 1:  Tworzymy pliki projektu

Załóż katalog w którym będzie znajdował się cały projekt, np. C:\Program Files\Xerte\templates\mojquiz, a następnie stwórz 3 pliki: quiz.rlo, quiz.xml oraz quiz.xwd (arkusz stylu dla kreatora).

Katalog mojquiz

Etap 2: Tworzymy wpisy w pliku quiz.rlo

Otwórz plik quiz.rlo (plik projektu) w dowolnym edytorze i umieść w nim następujący fragment kodu:

	<LO name="Learning Object">
		<IFC name="Interface" title="My Learning Object" visuals="1">
			<PG name="[Untitled]" title="Page Title" help="Page Help" />
		</IFC>
		<BIN name="Deleted Items" />
	</LO>

Etap 3: Tworzymy wpisy w pliku quiz.xml

Otwórz plik quiz.xml w dowolnym edytorze i umieść w nim następujący fragment kodu xml (intro, pytania, opcje). Za pomocą atrybutu background podaliśmy ścieżkę do pliku z grafiką tła. Między tagami <intro></intro> znajduje się nasz tekst wprowadzający do quizu, natomiast pytanie z opcjami do wyboru będzie się znajdować w części <question></question>, przy czym dla każdej opcji należy ustawić właściwy atrybut correct (true/false) tak, aby wiadomo było, która odpowiedź jest prawidłowa.

	<quiz background="FileLocation + 'media/robinHood.png'">
		<intro>To jest mój pierwszy QUIZ</intro>
		<question>
			<prompt>Pytanie nr. 1</prompt>
			<option correct="true">Odpowiedź nr 1</option>
			<option correct="false">Odpowiedź nr 2</option>
		</question>
		<question>
			<prompt>Pytanie nr. 2></prompt>
			<option correct="true">Odpowiedź nr 1</option>
			<option correct="false">Odpowiedź nr 2</option>
		</question>
	</quiz>

Etap 4: Dołączenie szablonu

Otwórz plik quiz.rlo w programie Xerte. W oknie Properties wybierz templateData i przypisz jej wartość FileLocation + ‘quiz.xml’.

templateData

Zauważ, że po dodaniu atrybutu templateData ikonka z obiektem Learning Object zmieniła swój wygląd (dodatkowe kółko). Kiedy zbudujemy kreator, będziesz w stanie zmodyfikować plik xml poprzez dwukrotne kliknięcie na powyższą ikonkę.

Etap 5: Budowanie kreatora

Na tym etapie zbudujemy arkusz stylów, który będzie informował Xerte w jaki sposób będzie wyświetlał dane. Przechodzimy do edycji pliku quiz.xwd. Plik .xwd jest plikiem, który powinien posiadać strukturę xml, a jego nazwa powinna być identyczna z nazwą pliku xml. np. quiz.xml -> quiz.xwd. Wszystkie informacje zawierają się pomiędzy tagiem <wizard>. Plik quiz.xwd zawiera wpisy dla każdego węzła, znajdującego się w pliku quiz.xml.

<wizard>
  <quiz duplicate="false">
    <background type="media" label="Plik tła"/>
    <help>To jest przykładowy kreator szablonu quizu. Plik obrazu tła powinien mieścić się w granicach 300 x 450 pikseli</help>
 </quiz>

 <intro type="text" height="300" label="Tekst wprowadzający" duplicate="false">
    <help>Pomoc dla wprowadzenia</help>
  </intro>

  <question>
    <help>Pomoc odnośnie pytania</help>
  </question>

  <prompt type="text" height="300" label="Pytanie" duplicate="false">
    <help>Pomoc dla treści pytania</help>
  </prompt>

  <option type="text" height="100" label="opcja">
    <correct type="ComboBox" options="true,false" label="Odpowiedź" width="100"/>
    <help>Pomoc dla opcji</help>
  </option>
</wizard>

Dla każdego węzła znajdującego się w pliku quiz.xml utworzony został odpowiadający mu węzeł w pliku quiz.xwd. Węzeł definiuje następujące parametry:

  • kontrola edycji pliku xml dla tego węzła lub jeden z jego atrybutów; można również określić takie właściwości wysokość lub szerokość,
  • czy użytkownik może duplikować węzeł lub nie; w tym przykładzie niektóre elementy nie mogą być powielane – np. jest tylko jeden tekst wprowadzający, pozostałe elementy mogą być powielane co oznacza, że użytkownik może utworzyć dowolną ilość pytań i dowolną liczbę przypisanych mu opcji,
  • pomoc dla każdego węzła xml.

Xerte - kreator szablonu

W oknie po lewej stronie pojawiła się struktura naszego pliku quiz.xml. Kiedy zaznaczysz dany węzeł, po prawej stronie pojawi się (w zależności od typu węzła) określone pole do uzupełnienia – są to wcześniej wspomniane definicje, które zostały umieszczone w pliku quiz.xwd. Pomoc zdefiniowana w arkuszu stylów znajduje się pod niebieską ikonką z napisem “i”.

W ten sposób stworzyliśmy w pełni funkcjonalnego kreatora, który upraszcza proces edycji pliku quiz.xml. Możesz wybrać tło graficzne dla projektu, uzupełnić tekst wprowadzenia, powielać pytania oraz opcje dla każdego pytania, ustawić które odpowiedzi są błędne, a które prawidłowe, przypisywać tekst pomocy dla każdego węzła.

Etap 6: Tworzenie szablonu

Teraz zbudujemy dynamiczny szablon Xerte, który będzie bazował na pliku xml i utworzy nasz quiz. Zamykamy okno kreatora i przechodzimy do okna projektu Xerte. Wykonamy następujące czynności.

  • załadujemy grafikę tła,
  • utworzymy tekst wprowadzający,
  • utworzymy właściwą liczbę pytań; każde pytanie będzie znajdować się na osobnej stronie oraz będzie posiadać określoną liczbę opcji do wyboru,
  • zbudujemy algorytm decydowania o poprawności danej odpowiedzi oraz stworzymy tablicę do przechowywania wyników quizu,
  • na koniec zrealizujemy interfejs, dzięki któremu użytkownik otrzyma informację zwrotną o wyniku quizu.

Zgodnie z powyższymi założeniami hierarchia będzie wyglądać w sposób następujący:

Szablon Xerte

Tło projektu

Xerte - Tło szablonu
Wystarczy dodać ikonę Graphic do ikony Entry frame (o nazwie tło) i uzupełnić wartość url, którą pobierzemy z pliku quiz.xml

{templateData.quiz[0].background}

Tło xml

Następnie podaj wartości x oraz y, które ustawią grafikę w odpowiednim miejscu.

Tekst wprowadzający

Podobnie postępujemy w przypadku ustawiania tekstu wprowadzającego.

Tekst wprowadzający

Dodajemy ikonę Text do ikony Page o nazwie intro. W oknie Text podaj paramter, który zwróci nam wartość z tekstem wprowadzającym z pliku quiz.xml, natomiast w oknie Properties podaj położenie tekstu oraz wymiary okna.

Xerte - wymiary okna intro

Tworzymy określoną liczbę pytań

Zrealizujemy to za pomocą ikony Script. Aby dodać ikonę skryptu należy prawym przyciskiem myszy kliknąć na Learning Object i wybrać “Add Setup Script” albo bezpośrednio dodać ikonę z przybornika ikon. W oknie Script wpiszemy definicję, która sprawdzi ilość zdefiniowanych pytań:

quizData = templateData.quiz[0];
quesCount = templateData.quiz[0].question.length;

Kolejny wpis pozwoli na utworzenie tylu stron ile jest pytań

icon.nextSibling.childNodes[2].duplicate(quesCount-1);

Potrzebujemy również tablicę gdzie zapiszemy wyniki quizu:

tracking = new Array();

.. a także umożliwimy śledzenie generowania strony z pytaniami:

built = new Array();

Na koniec musimy jeszcze gdzieś przechowywać informacje o tym, które odpowiedzi zostały zaznaczone przez użytkownika:

answers = new Array();

Xerte setup

Powyższy kod wykonywany jest tylko raz. Należy pamiętać o tym, że plik Xerte jest plikiem xml. Kiedy uruchamiany jest powyższy skrypt, reszta poleceń w pliku quiz.rlo nie jest jeszcze przetwarzana. Oznacza to, że istnieje możliwość budowania struktury, która będzie poddawana przetworzeniu. Powyższy kod duplikuje stronę z pytaniem tyle razy, ile jest pytań w pliku -1 (ponieważ na wstępie dołączyliśmy już pytanie wzorcowe).

Tworzenie strony z pytaniami

Przejdziemy teraz do najtrudniejszej części tworzenia tego projektu. Na stronie z pytaniem (która będzie wielokrotnie powielana) umieścimy treść pytania oraz odpowiednią liczbę opcji do wyboru. Będziemy również potrzebować algorytmu, który sprawdzi czy na pytanie została udzielona właściwa odpowiedź.

W oknie Script umieszczamy kod, który sprawdza bieżący numer pytania (informacja ta będzie wykorzystywana w dalszych etapach budowania projektu).

quesIndex = icon.parentNode.index() - 2;

Następnie konfigurujemy już samo pytanie – do tego celu wykorzystujemy wyrażenie, które odczyta tekst znajdujący się we właściwej części pliku xml.

Xerte - treść pytania

{templateData.quiz[0].question[quesIndex].prompt}

W kolejnym kroku będziemy budować interakcje w sposób bardzo podobny do wcześniejszych kombinacji z tworzeniem stron pytań.

Xerte - setup

optCount = quizData.question[quesIndex].option.length;

if (built[quesIndex] != 'true'){
  icon.nextSibling.firstChild.duplicate(optCount - 1);
}
built[quesIndex] = 'true';

Powyższy algorytm ma działać w taki sposób, abyśmy mieli pewność, że dana operacja będzie wykonana tylko raz. Jeśli użytkownik cofnie się do strony, nie możemy pozwolić na to, aby kolejne odpowiedzi na pytanie zostały wysłane. Następnie zbudujemy skrypt, który będzie sprawdzał czy odpowiedź użytkownika jest prawidłowa.

// czy odpowiedź jest prawidłowa?
if (quizData.question[quesIndex].option[icon.parentNode.index()].correct == 'true'){
tracking[quesIndex] = 1;
} else {
tracking[quesIndex] = 0;
}
//przechowaj wynik odpowiedzi
answers[quesIndex] = icon.parentNode.index();

Xerte - sprawdzenie prawidłowych odpowiedzi

Pokażemy również użytkownikowi, które odpowiedzi zostały wybrane, jeśli powrócił na stronę z pytaniem, na które już została udzielona odpowiedź.

if (answers[quesIndex] != undefined){
  tempIndex = answers[quesIndex];
  icon.previousSibling.childNodes[tempIndex].clip().setValue(true);
}

Tworzenie strony z informacją zwrotną

W celu stworzenia strony z informacją zwrotną do użytkownika użyjemy ikony Text. We właściwościach Text wpiszemy następujące wyrażenie:

{"To jest wynik testu. Udzieliłeś " + tracking.sum() + " prawidłowych odpowiedzi."}

Xerte - informacja zwrotna

Szablon mamy gotowy. Sprawdźmy wynik naszych działań:

Xerte - wynik

Dystrybucja szablonu

Skoro mamy już gotowy szablon, możemy stworzyć funkcjonalny plik w postaci binarnej, który można przenosić między innych użytkowników Xerte. Wykonaj następujące czynności:

  • zmień nazwę pliku z quiz.rlo na quiz.rlt. Rozszerzenie .rlt jest dla Xerte informacją, że do pliku dołączony jest kreator szablonu. W momencie otwarcia pliku Xerte zostaje automatycznie otwarte okno kreatora,
  • z menu Templates wybierz Create Template i podaj nazwę dla tworzonego pakietu, np. mojquiz.xtp.

Xerte - dystrybucja szablonu

Tak utworzony plik mojquiz.xtp można przenosić pomiędzy innych użytkowników Xerte. Plik mojquiz.xtp po wczytaniu do programu Xerte wygeneruje nam wszystkie pliki szablonu – *.rlt, *.xml,*.xwd oraz pozostałe pliki wchodzące w skład struktury katalogu.

[wpfilebase tag=’file’ id=’2′ tpl=’moj’]

Możesz również polubić…