VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
G e n e r á t o r X M L t e s t ů p ro e - l e a r n i n g o v ý systém Moodle 2.2 bakalářská práce
Autor: Marek Jonák Vedoucí práce: PaedDr. František Smrčka, Ph.D. Jihlava 2012
Abstrakt Bakalářská práce se zabývá převedením otázek z textové podoby do formátu XML, který lze následně zpracovat e-learningovým systémem Moodle 2.2. Webová aplikace obsahuje grafické uživatelské rozhraní, pomocí kterého můžeme aplikaci snadno ovládat a nastavovat podobu vstupních a výstupních dat. Bakalářská práce dále obsahuje technickou dokumentaci zdrojového kódu aplikace, popis vstupního textového souboru, výsledného XML souboru, postup importu do systému Moodle a možná budoucí rozšíření aplikace. Aplikace je vytvořena pomocí jazyka HTML, PHP a CSS stylů.
Klíčová slova e-learning, Moodle, HTML, PHP, CSS, XML
Abstract This thesis deals with the issues of converting text format to XML, which can then process the e-learning system Moodle 2.2 The web application provides a graphical user interface that can easily control the application form and set the input and output data. Bachelor thesis also includes technical documentation, application source code, a description of the input text file, the resulting XML file, how to import into Moodle and possible future expansion of the application. The apllication is developed usingHTML, PHP and CSS.
Keywords e-learning, Moodle, HTML, PHP, CSS, XML
Poděkování Rád bych poděkoval vedoucímu mé bakalářské práce PaedDr. Františku Smrčkovi, PhD., za ochotu, čas, cenné rady a materiály, které mi poskytl během konzultací k mé bakalářské práci.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl/a jsem seznámen/a s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne 22.5.2012 ...................................................... Podpis
Obsah 1
Úvod.......................................................................................................................... 9
2
Moodle .................................................................................................................... 10 2.1
2.1.1
Dlouhá tvořená odpověď .......................................................................... 10
2.1.2
Doplňovací úloha (cloze) .......................................................................... 11
2.1.3
Jednoduchá vypočítávaná úloha ............................................................... 11
2.1.4
Krátká tvořená odpověď ........................................................................... 11
2.1.5
Numerická úloha ....................................................................................... 11
2.1.6
Přiřazování ................................................................................................ 11
2.1.7
Přiřazování pro náhodně vybrané úlohy s krátkou tvořenou odpovědí .... 11
2.1.8
Pravda/Nepravda ....................................................................................... 11
2.1.9
Výběr z možných odpovědí ...................................................................... 12
2.1.10
Vypočítávaná úloha s více možnostmi ..................................................... 12
2.1.11
Vypočítávaná úloha .................................................................................. 12
2.2 3
Import souborů ................................................................................................. 12
XML........................................................................................................................ 14 3.1
4
Typy testových úloh ......................................................................................... 10
Syntaxe XML ................................................................................................... 14
Analýza a návrh implementace ............................................................................... 16 4.1
Rešerše existujících implementací ................................................................... 16
4.2
Části aplikace ................................................................................................... 16
4.3
Celková struktura XML souboru ..................................................................... 17
4.4
Tagy společné pro všechny typy úloh .............................................................. 17
4.5
Popis jednotlivých typů otázek ........................................................................ 18
4.5.1
Výběr z možných odpovědí ...................................................................... 18
4.5.2
Pravda/Nepravda ....................................................................................... 19 6
4.5.3
Krátká tvořená odpověď ........................................................................... 19
4.5.4
Přiřazování ................................................................................................ 19
4.5.5
Numerická úloha ....................................................................................... 20
4.6
Formát textového souboru................................................................................ 20
4.6.1 5
Popis implementace ................................................................................................ 23 5.1
Vývojové prostředí ........................................................................................... 23
5.1.1
PSPad ........................................................................................................ 23
5.1.2
EasyPHP ................................................................................................... 23
5.2
Použité technologie .......................................................................................... 23
5.2.1
HTML ....................................................................................................... 23
5.2.2
CSS ........................................................................................................... 24
5.2.3
PHP ........................................................................................................... 24
5.2.4
Regulární výrazy ....................................................................................... 24
5.3
6
Příklad textového souboru ........................................................................ 21
Implementace aplikace ..................................................................................... 25
5.3.1
Využití objektově orientovaného programování ...................................... 26
5.3.2
Zpracování vstupních dat .......................................................................... 26
5.3.3
Parsovaní vstupu ....................................................................................... 27
5.3.4
Výstup aplikace......................................................................................... 29
5.3.5
Instalace .................................................................................................... 29
Uživatelská příručka ............................................................................................... 30 6.1
Uživatelské rozhraní......................................................................................... 30
6.1.1
Nastavení číslování ................................................................................... 30
6.1.2
Nastavení XML......................................................................................... 31
6.1.3
Vstup ......................................................................................................... 32
6.2
Náhled .............................................................................................................. 32
6.3
Ošetření chyb ................................................................................................... 33 7
7
Testování ................................................................................................................. 34
8
Existující řešení....................................................................................................... 35
9
Závěr ....................................................................................................................... 36 9.1
Splnění cílů....................................................................................................... 36
9.2
Problémy a jejich řešení ................................................................................... 36
9.3
Možnosti rozšíření práce .................................................................................. 37
Seznam použité literatury ............................................................................................... 38 Seznam zkratek ............................................................................................................... 39 Seznam příloh ................................................................................................................. 40
8
1 Úvod Jelikož se od střední školy zajímám o tvorbu webových aplikací, tak moje volba bakalářské práce směřovala k výběru zadání, kde bude úkolem vytvořit webovou aplikaci pomocí jazyka PHP. Tomu odpovídalo zadání pana PaedDr. Františka Smrčky, PhD., vytvořit Generátor XML testů pro e-learningový systém Moodle 2.2. Cílem této práce bude vytvořit XML generátor pro vytváření testů do e-learningového systému Moodle z připraveného textového souboru. Aplikace bude mít jednoduché menu pro nastavení požadovaného výstupu. Otázky se budou zadávat buď vložením do formuláře, nebo importem z textového souboru. Generátor bude vytvářet otázky typu výběr odpovědi, přiřazení, krátká odpověď a otázka typu ano/ne. U otázek s výběrem odpovědi bude požadováno možnost více správných odpovědí na otázku. Před generováním výstupu do souboru bude možnost náhledu vlastního testu. Testy budou generovány do souboru .xml, který bude kompatibilní s importovacím souborem xml do e-learningového systému
Moodle 2.2.
Jelikož se jedná o webovou aplikaci, využiji k jejímu naprogramování jazyků PHP 5 a HTML. Programový kód PHP a HTML bude od sebe co možná nejvíce oddělen. Během programování využiji objektově orientovaného programování se zaměřením na co nejčitelnější kód. Vzhledem k využití aplikace především lektory na Vysoké škole polytechnické bude její design jednoduchý a hlavně přehledný. Design bude tvořen pomocí CSS (kolekce metod pro grafickou úpravu webových stránek). Aplikace by měla být
validní pro většinu typů prohlížečů.
9
2 Moodle Moodle je softwarový balíček pro tvorbu výukových systémů a elektronických kurzů na internetu. Je vyvíjen jako nástroj podporující sociálně konstruktivistický přístup ke vzdělávání. Moodle je poskytován zdarma jako Open Source software spadající pod obecnou veřejnou licenci GNU.[2] Tvůrci kurzu v prostředí Moodle mají k dispozici řadu modulů, z nichž sestavují jeho obsah. Nastavení modulů i jejich jednotlivých instancí lze dále přizpůsobovat a využívat je tak v různých pedagogických situacích. Kromě modulů dodávaných přímo v distribuci je k dispozici řada rozšiřujících modulů.[2] Pomocí standardně dodávaných modulů lze do online kurzu vkládat např.: •
studijní materiály ve formě HTML stránek, souborů ke stažení, Flash animací, strukturovaných přednášek apod.
•
diskusní fóra s možností odebírání příspěvků emailem
•
úkoly pro účastníky kurzu
•
automaticky vyhodnocované testy složené z různých typů testových úloh
•
slovníky a databáze, na jejichž plnění se mohou podílet účastníci kurzu
•
ankety
•
vzdělávací obsah dle specifikace SCORM nebo IMS Content Package
Moodle umožňuje evidenci studijních výsledků. Činnost uživatelů je zaznamenávána v podrobných protokolech a souhrnných statistikách. Je možno jej napojit na další systémy, např. autentikační (LDAP, Shibboleth), komunikační (IMAP), sociální (Mahara) nebo pro správu webového obsahu Postnuke.[2]
2.1 Typy testových úloh 2.1.1 Dlouhá tvořená odpověď Umožňuje odpovědět několik vět nebo odstavců. Hodnocení musí poté proběhnout ručně.
10
2.1.2 Doplňovací úloha (cloze) Úloha toto typu je velmi flexibilní, ale může být vytvořena pouze zadáním zdrojového textu ve speciálním formátu. Tento text obsahuje kódy, které vytvářejí komplexní úlohu s vloženými dílčími úlohami s více odpověďmi, krátkou odpovědí či numerickou úlohou.
2.1.3 Jednoduchá vypočítávaná úloha Jednodušší varianta vypočítávané úlohy. Vypočítávaná úloha se chová jako numerická úloha, ale konkrétní hodnoty jsou pro každého studenta náhodně vybrány z jisté množiny.
2.1.4 Krátká tvořená odpověď Odpověď je tvořena jedním nebo několika slovy, které jsou porovnány s různými modelovými odpověďmi. Ty mohou používat i zástupné znaky.
2.1.5 Numerická úloha Odpověď je tvořena číselným údajem doplněným případně o jednotky. Odpověď je hodnocena na základě číselného porovnání s danou tolerancí s různými modelovými odpověďmi.
2.1.6 Přiřazování Odpověď na každou podúlohu musí být vybrána ze seznamu možností.
2.1.7 Přiřazování pro náhodně vybrané úlohy s krátkou tvořenou odpovědí Chová se jako přiřazovací úloha, jejíž hodnoty jsou vybrány náhodně z úloh s krátkou odpovědí z dané kategorie.
2.1.8 Pravda/Nepravda Jednoduchá varianta úlohy s více odpověďmi. Na dané tvrzení nabízí pouze dvě možné volby - "Pravda" a "Nepravda".
11
2.1.9 Výběr z možných odpovědí Umožňuje výběr jedné nebo více odpovědí ze seznamu.
2.1.10 Vypočítávaná úloha s více možnostmi Vypočítávaná úloha s více možnostmi se chová jako obyčejná úloha s více možnostmi, ale nabízené odpovědi se pro každého studenta vypočítávají jako výsledek daného vzorce s náhodně vybranými hodnotami z jisté množiny.
2.1.11 Vypočítávaná úloha Vypočítávaná úloha se chová jako numerická úloha, ale konkrétní hodnoty jsou pro každého studenta náhodně vybrány z jisté množiny.
2.2 Import souborů Moodle má množství různých formátů, které lze použít pro import do banky úloh. Patří mezi ně některé proprietární formáty, stejně jako textové soubory a formáty Moodle. Je možné importovat otázky ze souboru v síti nebo ze souboru z počítače, které budou přidány k ostatním souborům v kurzu. Důležité je základní kódování tohoto souboru. Pro import souboru do banky úloh musíme v levém okně menu Nastavení vybrat položku Banka úloh a následně vybrat Import. Po provedení těchto kroků se nám zobrazí formulář s nastavením pro import souboru. V první části formuláře vybíráme formát souboru, který je patrný z obrázku 1. Nás bude zajímat formát XML Moodle.
12
Obrázek 1: formát souboru
V druhé a třetí části formuláře nastavujeme jméno kategorie, kam se mají úlohy importovat, zda se má získat název kategorie ze souboru nebo kontext ze souboru. Dále se nastavuje mapování známek, to znamená, jestli při bodovém ohodnocení otázky se liší hodnota od hodnot používající Moodle vypsat chybové hlášení nebo zaokrouhlit hodnotu k té nejblíže používající Moodle. Předposlední položka slouží k zastavení importu při chybě. Poslední položkou je výběr cesty k souboru. Vše je názorně vidět na Obrázku 2.
Obrázek 2: Obecná nastavení a import souboru
13
3 XML Zkratka XML zastupuje anglický název jazyka – eXtensible Markup Language. To přeloženo do češtiny znamená „rozšiřitelný značkovací jazyk“. Jak už je z názvu patrno, jazyk XML patří do skupiny značkovacích jazyků. Tyto technologie umožňují pomocí značek (tagů) označovat části textu. Předchůdcem XML a zároveň jedním z prvních značkovacích jazyků byl SGML (Standard Generalized Markup Language) přijatý jako ISO norma v roce 1986. Byl natolik složitý a obecný, se spoustou volitelných vlastností, že nenašel příliš velké uplatnění. Dal ovšem základ pro vývoj dalších, lépe uplatnitelných značkovacích jazyků. [1] Jazyk XML vznikl v rámci konsorcia W3C (http://www.w3c.org). Tato nezávislá organizace se zabývá nejen vytvářením nových standardů na webu, ale i jejich následným udržováním. [1] Jedná se o jednoduchý, otevřený formát, který není závislý na zvoleném operačním systému či jiné úzce specializované technologii. Jednoduchý je proto, že je založen na textovém formátu a zároveň má poměrně snadná syntaktická pravidla. O otevřený formát se jedná z důvodu volného přístupu ke specifikaci jazyka na stránkách W3C. Každý tak může snadno založit své aplikace právě na XML. To je velký rozdíl oproti komerčním produktům, které jsou značně komplikované, a navíc nejsou k dispozici zdarma. [1]
3.1 Syntaxe XML XML dokument je text, vždy Unicode, v Česku obvykle kódovaný jako UTF-8, ale jsou přípustná i jiná kódování. Na rozdíl od např. HTML, efektivita XML je silně závislá na struktuře, obsahu a integritě. Aby byl dokument považován za správně strukturovaný, musí mít nejméně následující vlastnosti: •
Musí mít právě jeden kořenový (root) element.
•
Neprázdné elementy musí být ohraničeny startovací a ukončovací značkou. Prázdné elementy mohou být označeny tagem „prázdný element“.
14
•
Všechny hodnoty atributů musí být uzavřeny v uvozovkách – jednoduchých (') nebo dvojitých ("), ale jednoduchá uvozovka musí být uzavřena jednoduchou a dvojitá dvojitou. Opačný pár uvozovek může být použit uvnitř hodnot.
•
Elementy mohou být vnořeny, ale nemohou se překrývat; to znamená, že každý (ne kořenový) element musí být celý obsažen v jiném elementu.
Jména elementů v XML rozlišují malá a velká písmena: např. „
“ a „
“ je pár, který vyhovuje správně strukturovanému dokumentu, pár „
“ a „
“ je chybný. [3]
15
4 Analýza a návrh implementace 4.1 Rešerše existujících implementací Na internetu se již nachází jedno řešení, které lze nalézt na stránkách http://vletools.com/. Do aplikace se lze přihlásit pouze tak, pokud má uživatel zřízen účet na sociální síti Facebook nebo Twitter. Stávající řešení ovšem neumožňuje použití českých znaků, tudíž je pro nás více méně nepoužitelné. Tento důvod vedl k vytvoření vlastní aplikace, která bude umožňovat použití českých znaků a bude doplněna o širší nastavení výsledného xml souboru.
4.2 Části aplikace Naše aplikace se rozkládá na pět částí. První dvě části slouží k zadání testových úloh. Buďto můžeme zadávat úlohy přímo do formuláře, nebo je můžeme mít připraveny v textovém souboru a zadat je pomocí importu souboru. Třetí částí je samotné zpracování zadaných testových úloh. Čtvrtou a pátou částí je samotný výstup aplikace. Můžeme si zobrazit náhled testových otázek, nebo vygenerovat požadovaný XML soubor. Vše je patrné z obrázku 3.
Obrázek 3: části aplikace
16
4.3 Celková struktura XML souboru Celý soubor je uzavřen tagy takto. Důležité je, aby na prvním řádku byl takzvaný „XML-line“ s kódování v UTF-8 pro české znaky, jinak by náš soubor nefungoval správně.
. . . Mezi tagy
se nachází libovolný počet tagů . Jedním z těchto tagů může být specifikace kategorie. $course$/XXXX Tam, kde je XXXX je nový název kategorie. Pokud kategorie existuje, bude otázka přidána ke stávajícímu kurzu, jinak se vytvoří nová kategorie. To vše v případě, že bude vybrána možnost „Získat kategorii ze souboru“ jak již bylo popsáno dříve.[10]
4.4 Tagy společné pro všechny typy úloh Otázka je psána takto. Název úlohy . . . „Type“ je typ otázky (pravda/nepravda, krátká tvořená odpověď, …).
17
„Format“ je možnost formátování textu otázky. Na výběr máme HTML(výchozí), moodle_auto_format, plain_text a markdown. Dále jsou možné tyto tagy [10]: •
penalty - penalizace za vícero pokusů
•
generalfeedback - hlavní reakce na odpověď
•
defaultgrade - bodové hodnocení otázky
•
hidden - zda je obsažen skrytý text
4.5 Popis jednotlivých typů otázek 4.5.1 Výběr z možných odpovědí Otázka obsahuje vždy jeden tag pro každou možnou volbu odpovědi. Každá volba může nést zpětnou vazbu a hodnocení (pomocí zlomku). Pokud se jedná o otázku s více odpověďmi, hodnocení 100% se rozdělí mezi ně. Navíc otázka má tyto tagy [10]: •
single – zda se jedná o jednu správnou odpověď nebo více odpovědí, hodnoty (true/false)
•
shuffleanswers – zamíchání odpovědí, hodnoty (0/1)
•
correctfeedback – vazba na jakoukoliv správnou odpověď
•
partiallycorrectfeedback – vazba na jakoukoliv částečně správnou odpověď
•
incorrectfeedback – vazba na jakoukoliv nesprávnou odpověď
•
answernumbering – formát číslování možností, hodnoty ('none', 'abc', 'ABCD' nebo '123')
•
penalty – odpočet za nesprávnou odpověď
Správná odpověď Správně! Špatná odpověď Chyba! 18
Další špatná odpověď Chyba! <shuffleanswers>1 <single>true abc
4.5.2 Pravda/Nepravda Otázka obsahuje pouze dvě odpovědi ano/ne (true/false). Je zde opět zpětná vazba na odpověď. Atribut určuje správnou odpověď. true Správně! false Chyba!
4.5.3 Krátká tvořená odpověď Tento typ otázky podporuje několik správných odpovědí na otázku, z nichž každá má svoji váhu a zpětnou vazbu. Otázka obsahuje navíc tag<usecase> který rozhoduje, zda se budou rozlišovat malá a velká písmena, hodnoty (0/1). Správná odpověď Správně! Alternativní správná odpověď Správně!
4.5.4 Přiřazování Otázka typu přiřazování využívá tagu<shuffleanswers> pro zamíchání položek otázky. Každý pár je obsažen uvnitř tagu<subquestion>. První položka každého páru je
19
obsažena v tagu, zatímco druhá položka je obsažena v tagu. Zpětná vazba a známka není podporována v Moodle pro tento typ odpovědi. <subquestion> Toto je první položka v prvním páru. Toto je druhá položka v prvním páru. <subquestion> Toto je první položka v druhém páru. Toto je druhá položka v druhém páru. <shuffleanswers>true
4.5.5 Numerická úloha Numerická úloha obsahuje tag , který slouží k určení tolerance, jak má být výsledek přesný. Dále využívá tagu k uřčení jednotek, který má jméno a takzvaného „šiřitele“. To znamená, pokud bude odpověď v jednotkách kilometru, může být alternativní odpověď v metrech s šiřitelem 1000. 23 0,11 Reakce na odpověď
4.6 Formát textového souboru Textový soubor může obsahovat tyto druhy otázek: krátká tvořená odpověď, výběr z možných odpovědí, numerická úloha, přiřazování a pravda/nepravda. Každá otázka v textovém souboru obsahuje na začátku klíčové slovo, kterým se odlišuje typ otázky (multichoice pro výběr z možných odpovědí, truefalse pro pravda/nepravda, shortanswer pro krátká tvořená odpověď, matching pro přiřazování, numerical pro numerickou úlohu). Dále následuje text otázky, jednotlivé odpovědi a nakonec správná odpověď. V případě, že po první otázce následuje sled stejného typu otázek, není nutné před každou další otázku psát klíčové slovo. To je nutné napsat pouze při změně typu otázky. 20
4.6.1 Příklad textového souboru Výběr z možných odpovědí – jedna správná odpověď multichoice Kolik je 2+2 1) jedna 2) čtyři 3) dvě Answer: 2
- číslo správné odpovědi
Výběr z možných odpovědí – více správných odpovědí multichoice Která města se nachází v ČR 1) Bratislava 2) Praha 3) Brno Answer: 2,3 - čísla správných odpovědi Krátká tvořená odpověď shortanswer Spočítej: 2 + 2 Answer: 4, čtyři - odpověď může obsahovat alternativní odpovědi na otázku Pravda/Nepravda truefalse Platí že 3+3=6 Answer: True Přiřazování matching Spoj země a města 1. Moskva match: Rusko 2. Helsinky match: Finsko 3. Berlín match: Německo
21
Numerická úloha numerical Kolik je 2,13 + 5. Tolerance: 0,1 Answer: 7,13
- nepovinný údaj, pokud se neuvede, tak je tolerance 0
22
5 Popis implementace V této kapitole se podrobněji seznámíme s implementací aplikace, jaké byly použity programovací techniky a postupy při vývoji aplikace.
5.1 Vývojové prostředí 5.1.1 PSPad PSPad je navržen jako univerzální editor pro editaci prostých textů a zdrojových kódů mnoha programovacích, skriptovacích a značkovacích jazyků. Umožňuje správu projektů, manipulaci s více soubory najednou pomocí moderního rozhraní MDI (Multiple Document Interface), průzkumník kódů a zvýrazňování syntaxe (včetně uživatelské možnosti implementace dalších jazyků) vytvořené pomocí komponenty SynEdit. Obsahuje také značné množství interních nástrojů např. FTP klient, HEX Editor, Lorem ipsum generátor, průzkumník kódu a další.[4]
5.1.2 EasyPHP EasyPHP je balík pro testování stránek obsahující Apache, PHP, MySQL a PHPMyAdmin pro snadnou instalaci flexibilního jazyka PHP na Windows. Umožňuje spustit PHP skripty (i redakční systém) na vlastním počítači.
5.2 Použité technologie 5.2.1 HTML HyperText Markup Language, označovaný zkratkou HTML, je značkovací jazyk pro hypertext. Je jedním z jazyků pro vytváření stránek v systému World Wide Web, který umožňuje publikaci dokumentů na Internetu. Je charakterizován množinou značek (tzv. tagů) a jejich atributů definovaných pro danou verzi. Mezi značky se uzavírají části textu dokumentu a tím se určuje význam (sémantika) obsaženého textu. Názvy jednotlivých značek se uzavírají mezi úhlové závorky < a >. Část dokumentu tvořená otevírací značkou, nějakým obsahem a odpovídající ukončovací značkou tvoří tzv. element (prvek) dokumentu. [5]
23
5.2.2 CSS Kaskádové styly (v anglickém originále Cascading Style Sheets se zkratkou CSS) je jazyk pro popis způsobu zobrazení stránek napsaných v jazycích HTML, XHTML nebo XML. Jazyk byl navržen standardizační organizací W3C, autorem prvotního návrhu byl Håkon Wium Lie. Byly vydány zatím dvě úrovně specifikace CSS1 a CSS2, dne 7. června 2011 byla dokončena revize CSS 2.1 a pracuje se na verzi CSS3. Hlavním smyslem je umožnit návrhářům oddělit vzhled dokumentu od jeho struktury a obsahu. Původně to měl umožnit už jazyk HTML, ale v důsledku nedostatečných standardů a konkurenčního boje výrobců prohlížečů se vyvinul jinak. Starší verze HTML obsahují celou řadu elementů, které nepopisují obsah a strukturu dokumentu, ale i způsob jeho zobrazení. Z hlediska zpracování dokumentů a vyhledávání informací není takový vývoj žádoucí. [6]
5.2.3 PHP PHP (rekurzivní zkratka PHP: Hypertext Preprocessor, česky „PHP: Hypertextový preprocesor“, původně Personal Home Page) je skriptovací programovací jazyk. Je určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML, XHTML či WML. PHP lze použít i k tvorbě konzolových a desktopových aplikací. Pro desktopové použití existuje kompilovaná forma jazyka. Při použití PHP pro dynamické stránky jsou skripty prováděny na straně serveru – k uživateli je přenášen až výsledek jejich činnosti. Interpret PHP skriptu je možné volat pomocí příkazového řádku, dotazovacích metod HTTP nebo pomocí webových služeb. Syntaxe jazyka je inspirována několika programovacími jazyky (Perl, C, Pascal a Java). PHP je nezávislý na platformě, rozdíly v různých operačních systémech se omezují na několik systémově závislých funkcí a skripty lze většinou mezi operačními systémy přenášet bez jakýchkoli úprav. [7]
5.2.4 Regulární výrazy Regulární výraz (zkracováno na regexp, regex či jen RE podle anglického regular expression) je řetězec popisující celou množinu řetězců, konkrétně regulární jazyk. Představil je americký matematik Stephen Cole Kleene. [8]
24
Regulární
výrazy
mohou
být
podporovány
například
skriptovacími
jazyky,
propracovanějšími textovými editory nebo souborovými manažery, nejčastěji formou externí knihovny (oniguruma) nebo sady funkcí (regex.h jako součást libc).[8] Nejčastější využití je: vyhledávání textu •
buď prosté zjištění, zdali vstupní text vyhovuje zadanému regulárnímu výrazu, nebo
•
zjištění offsetu (pozice) ve vstupním textu, kde shoda s regulárním výrazem začíná
manipulace s textem •
záměna textu v jednom z podvýrazů regexu
•
extrakce všech shod s regulárním výrazem do předané proměnné
Pokud chce uživatel v textu vyhledat nějaký řetězec, který nezná přesně nebo který může mít více podob, může zadat regulární výraz, který postihne všechny požadované varianty. Program tak nalezne všechny části textu, které danému výrazu odpovídají. Regulární výraz se skládá z literálů textu, které se mají shodovat, a speciálních znaků, které nejsou součástí hledaného textu, sloužících pro popis alternativ, množin, počtů výskytů a přepínačů.[8] Příklad regulárního výrazu pro číslování odpovědí: ^(\d+)\s*[\)\.]. Tomuto výrazu odpovídá číslování 1. 2. 3. nebo 1) 2) 3).
5.3 Implementace aplikace Celá aplikace je rozdělena do třech souborů. Soubor s názvem index.php se stará o zobrazení celé aplikace. Druhý soubor s názvem zpracuj.php obsahuje hlavní část programu, která zpracovává veškeré vstupní informace a po zpracování poskytuje požadovaný výstup aplikace. A nakonec třetí soubor s názvem styly.css řeší grafické zobrazení celé aplikace. Dále si popíšeme zajímavé části kódu aplikace.
25
5.3.1 Využití objektově orientovaného programování Jelikož lze v PHP 5 tohoto způsobu využít, učinil jsem tak pro snadné ukládání různých typů úloh. Pro každý typ úlohy jsem si vytvořil samostatnou třídu, do které ukládám požadované informace, které dále zpracovávám. Pro ukázku uvádím třídu AnoNe, která slouží pro uložení úlohy typu Pravda/Nepravda. class AnoNe { public $otazka = ""; public $odpoved = ""; public $n_otazky = "";
//Otázka //Odpověď //Název otázky
function __construct ($otazka, $odpoved, $n_otazky){ $this->otazka = $otazka; $this->odpoved = $odpoved; $this->n_otazky = $n_otazky; } function Vypis(){ . . . } }
Třída obsahuje tři položky pro ukládání dat (otázka, odpověď na otázku, název/číslo otázky). Všechny tři položky jsou typu public z důvodu snadnějšího přístupu při vytváření výstupu do xml souboru. Pomocí konstruktoru tyto položky naplníme. Dále už máme jen funkci Vypis( ) sloužící k zobrazení náhledu otázky před výpisem do souboru. Podobně jsou vytvořeny třídy pro zbývající typy úloh.
5.3.2 Zpracování vstupních dat Otázky v textové podobě lze zadávat dvěma způsoby. Buďto přímím vložením otázek do textového pole nebo zadáním cesty k textovému souboru s otázkami. V případě zadání cesty k souboru jsou data v textovém poli ignorována. Soubor se následně nahraje na server, načtou se z něj data do proměnné $radek a poté je soubor ze serveru smazán. Tyto data jsou dále upravena a rozdělena do pole po jednotlivých řádcích aby byla připravena k dalšímu zpracování. Stejně tak jsou upravena data z textového pole.
26
Díky tomu že máme data rozdělena do pole po řádcích, můžeme začít data řádek po řádku zpracovávat. Pomocí klíčový slov určíme, jaký typ otázky budeme zpracovávat. for ($i = 0; $i < $velikost_pole; $i++){ řádek po řádku if(preg_match("/[^\s]/",$rows[$i])){ prázdných řádků switch ($rows[$i]) { case "multichoice": $typ_otazky = 1; $i++; break; case "truefalse": $typ_otazky = 2; $i++; break; case "shortanswer": $typ_otazky = 3; $i++; break; case "matching": $typ_otazky = 4; $i++; break; case "numerical": $typ_otazky = 5; $i++; break; }
//procházení //vynechání
Tato konstrukce nám zajistí, jaký typ otázky budeme zpracovávat, dále se postará o to, abychom nemuseli uvádět klíčové slovo před každou další stejnou otázkou, ale jen pokud se bude měnit typ otázky. Po zjištění jaký typ otázky budeme zpracovávat lze za pomocí regulárních výrazu jednotlivé otázky rozparsovat a požadovaná data uložit do tříd uvedených výše.
5.3.3 Parsovaní vstupu Většinou když píšeme nějaký program, tak dostanete vstup (nebo jeho část) jako jeden řetězec. V něm je ale nějak zakódována spousta informací a my je potřebujete dostat do patřičných proměnných. Tomu, jak tyto informace získat, se říká parsování.
27
Samotné parsování začíná u otázky. Otázka může začínat číslem otázky. V tom případě náš program zjistí číslo otázky, které se dále použije do názvu otázky. Číslo otázky je pak dále oříznuto od otázky a takto upravená otázka se uloží. Pokud otázka neobsahuje na začátku číslo, do názvu otázky je použita celá otázka. V následující konstrukci je uvedeno čtení otázky a její oříznutí čísla u typu otázky výběr z možných odpovědí. while(!$cela_otazka){ if(preg_match("/[^\s]/",$rows[$i])){ if(preg_match($rr,$rows[$i]) and $cteni_otazky ){ $cela_otazka = true; } else{ $otazka = $otazka.$rows[$i]; $cteni_otazky = true; $i++; … } } else $i++; } Zde můžeme vidět, že načítání otázky probíhá do té doby, dokud nenarazíme na řetězec vyhovující regulárnímu výrazu obsahující proměnná $rr. V této proměnné se nachází regulární výraz pro nastavenou hodnotu číslování odpovědí v uživatelské části aplikace. Pokud se tak stane, čtení otázky končí a pokračujeme oříznutím čísla otázky. if(preg_match("/^(\d+)\s*[\)\.](.+)/",$otazka)){ $j=0; $n_otazka = "Otázka "; while(is_numeric($otazka[$j])){ $n_otazka = $n_otazka.$otazka[$j]; $j++; } $otazka = preg_replace('/^(\d+)\s*[\.]/', '', $otazka); } else $n_otazka = $otazka; V této konstrukci nejdříve zjistíme, zda otázka obsahuje na začátku číslo. Pokud ano, číslo načteme a poté ho z otázky ořízneme.
28
5.3.4 Výstup aplikace Výstupem aplikace může být buďto náhled otázek, který nám zajistí funkce Vypis(), kterou obsahuje každá třída, nebo samotný výstup do souboru XML. Výstup do souboru probíhá tak, že se nejdříve soubor otevře pro zápis. Poté se postupně začnou zpracovávat otázky a pokaždé otázce se přidá do proměnné $text požadovaný xml kód. Po zpracování všech otázek se zapíše obsah proměnné $text do souboru, soubor se uzavře a tím nám vznikne požadovaný výstupní soubor XML, který lze použít pro import otázek do systému Moodle 2.2.
5.3.5 Instalace Naše webová aplikace potřebuje ke svému běhu webový server. Buďto můžeme použít nějaký softwarový balíček jako my (EasyPHP) pro běh PHP skriptů na našem počítači nebo můžeme využít služeb na internetu a zřídit si svou vlastní doménu pomocí webhostingu (pronájem prostoru pro webové stránky na cizím serveru). Existuje řada placených i neplacených webhostingů. Jediné co naše aplikace potřebuje k instalaci je umístit zdrojové soubory na webový server a mít povoleno nahrávání souborů na server. Těmto požadavkům vyhovuje většina webhostingových poskytovatelů. Naše aplikace je otestována na verzi PHP 5.3.8 pomocí EasyPHP a na serveru www.webzdarma.cz .
29
6 Uživatelská příručka V této kapitole se blíže seznámíme s naší aplikací. Vysvětlíme si, jak naši aplikaci používat, správně nastavit, abychom dosáhli co možná nejlepšího výsledku.
6.1 Uživatelské rozhraní
Obrázek 4: Uživatelské rozhraní
Hlavní obrazovka je rozdělena na uživatelskou část, a na část s nápovědou nacházející se v pravém sloupečku. V nápovědě se nachází seznam podporovaných typů úloh a jednoduchá nápověda, jak zadávat jednotlivé typy úloh. Uživatelská část je rozdělena do třech částí, které jsou pojmenovány: Odpovědi začínají, Nastavení XML a Vstup. Jednotlivé části si rozebereme zvlášť.
6.1.1 Nastavení číslování První část nazvaná „Odpovědi začínají“ slouží k nastavení, jak budou zadána vstupní data. Především se jedná o typy úloh výběr z více odpovědí a přiřazování. U těchto typů úloh může začínat číslování odpovědi na otázku různě. Například může začínat číslem nebo písmenem, poté může následovat tečka nebo pravá závorka. Na obrázku 5 je 30
uveden možný formát át číslování č odpovědí. V případě číslování íslování písmenem je možné použití malých či velkých znaků. znak
Obrázek 5: číslování odpovědí
Tato možnost nastavení je zde spíše z programátorského hlediska. Je však velmi důležité, aby formát číslování otázek v souboru byl stejný. Pokud by tomu tak nebylo, a formát číslování íslování otázek by se u otázek lišil, nepodařilo nepoda ilo by se nám vytvořit vytvo požadovaný XML soubor.
6.1.2 Nastavení XML V této druhé části ásti máme možnost několika n kolika nastavení, které ovlivňují výsledný XML soubor. Tyto nastavení jsou pak zpracovány systémem Moodle a mají vliv na podobu a funkčnost nost testových úloh. První možností je zamíchání odpovědí. odpov dí. Pokud tuto možnost vybereme, otázky budou v systému Moodle zobrazovány v jiném pořadí adí než byly zadány v textové podobě. Výchozí hodnotou je, že se odpovědi odpov míchat nebudou. Druhou možností volby je číslování odpovědí. Na výběrr máme: nečíslovat neč odpovědi, malá písmena, velká písmena nebo číslice. íslice. Možnosti jsou uvedeny na obrázku 6. Výchozí hodnotou je otázky nečíslovat ne (none).
Obrázek 6: možnosti číslování
31
Třetí etí položkou je penalizace pro vícero pokusů. pokus . Tato možnost slouží k penalizaci, pokud nějakou jakou otázku zodpovíme špatně špatn a pokusíme se jí zodpovědě ědět znovu. Pokud se nám na ní podaří odpovědět odpově správně,, nedostaneme za ní plný počet poč bodů ale počet sražený o tuto penalizaci. Výběr Výb možností penalizace je patrný z obrázku 7. 7 Výchozí nastavená hodnota je 0% tedy bez penalizace.
Obrázek 7: penalizace
Poslední položkou je možnost více možností u jedné odpovědi. odpovědi. Tato možnost nám slouží k tomu, že někdy ěkdy je potřeba, pot aby šlo odpovědětt na otázku s jednou správnou možností zaškrtnutím více odpovědí. odpov dí. To znamená, aby student nepoznal, že otázka má pouze jednu správnou odpov dpověď.
6.1.3 Vstup Ve třetí části ásti se dostáváme k samotnému zadávání dat. Zde máme na výběr výb možnost zadání cesty k souboru nebo můžeme m otázky zadávat přímo římo do textového souboru. V případě zadání cesty k souboru, ignorují se data zapsaná v textovém poli. Je zde ještě j možnost zadat název kategorie. Název kategorie využívá systém Moodle k oddělení (vytvoření) různých testových úloh pro různé kurzy.. Pokud nezadáme název kategorie, aplikace si sama doplní vlastní název kategorie.
6.2 Náhled Před ed samotným vygenerováním XML souboru s otázkami si můžeme ůžeme zobrazit náhled otázek pomocí tlačítka čítka náhled. náhled. Tento náhled slouží spíše pro kontrolu, než aby nám ukázal, jak budou otázky zobrazeny v systému Moodle. Ukázku náhledu áhledu můžeme m vidět na obrázku 8.
32
Obrázek 8: náhled
6.3 Ošetření chyb V případě, že otázky nejsou zadány v požadovaném formátu, jsme o tom informováni při zobrazení náhledu. V náhledu se nám zobrazí chybová hláška s číslem řádku, na kterém se chyba nachází. Pakliže se snažíme rovnou vygenerovat výstupní soubor bez náhledu a obsahuje chyby, soubor není vygenerován a zobrazí se nám chybové hlášení, které obsahuje čísla řádků s chybou a hlášení, že soubor nelze uložit.
33
7 Testování Aplikace byla od začátku vývoje testovaná několika soubory s testovými otázkami. Tyto soubory obsahovali námi správně i špatně vytvořené testové otázky tak, abychom byli schopni zachytit co nejvíce chyb v programu a mohli na ně patřičně reagovat. Všechny chyby byly během testování správně zadaných testových otázek odchyceny a následně opraveny. Při testování špatně zadaných testových otázek byl vytvořen systém zachytávání chyb tak, aby byla aplikace stabilní a dokázala se s chybami vypořádat. Dále byla aplikace testována lektory projektu e-learning a to panem PaedDr. Františkem Smrčkou, PhD., a paní Ing. Lenkou Lízalovou, Ph.D.
Aplikace byla také testována na validitu HTML kódu a CSS stylů pomocí oficiálních stránek konsorcia W3C dostupných na http://validator.w3.org/. Aplikace je validní podle normy HTML 4.01 Transitional a také podle CSS level 3.
34
8 Existující řešení Na stránkách http://vletools.com existuje podobné řešení s názvem Moodle XML Converter. Toto řešení zahrnuje možnost zadání více druhů testových otázek a to dlouhá tvořená odpověď a doplňovací úloha. Oproti naší aplikaci zatím neposkytuje širší nastavení výsledného XML souboru a má problémy s českou abecedou. V naší aplikaci lze nastavit kromě formátu číslování odpovědí a možnosti zda se mají otázky zamíchat ještě penalizaci za vícero pokusů a možnost více odpovědí u odpovědi s jednou správnou odpovědí. Nevýhodou také je, že musíme mít zřízen účet na sociální síti Facebook nebo Twitter abychom se mohli do jejich aplikace přihlásit oproti naší, kde není zapotřebí žádného přihlašování.
35
9 Závěr 9.1 Splnění cílů Cílem práce bylo vytvořit Generátor XML testů pro e-learningový systém Moodle 2.2, který by z připraveného textového souboru vytvořil soubor pro import otázek do systému Moodle. Otázky se můžou zadávat buďto vložením do formuláře nebo importem z textového souboru. Generátor vytváří otázky typu: výběr odpovědi, přiřazení, krátká odpověď a otázka typu ano/ne. U otázek s výběrem odpovědi může být možnost více odpovědí. Před generování souboru byla požadována možnost vlastního náhledu otázek. Tyto cíle se podařilo splnit. V aplikaci také můžeme měnit formát číslování odpovědí, zda se mají odpovědi zamíchat, penalizace za vícero pokusů a možnost více odpovědí u otázky s jednou správnou odpovědí. Byla
vytvořena
aplikace,
která
je
dostupná
na
internetové
adrese
http://jonak.wz.cz/moodle/. Nad rámec zadaných cílů byla aplikace rozšířena o numerickou vypočítávanou úlohu s možností tolerance na přesný výsledek a o možnost širšího nastavení jako byla možnost penalizace za vícero pokusů a možnost více odpovědí u otázky s jednou správnou odpovědí.
9.2 Problémy a jejich řešení Během vývoje aplikace jsem se setkal pouze se dvěma problémy. První problém byl s tím, že jsem neměl velké zkušenosti se zpracováním textových řetězců v PHP. Bylo zapotřebí číst textový vstup tak, abychom ho mohli dále rozložit a získat z něj požadovaná data. K tomu mi velice pomohlo užití regulárních výrazů. Díky nim jsem mohl testovat textové řetězce na požadovaná data a dále s nimi pracovat podle potřeby. Druhý menší problém byl se čtením dat z textového souboru, kdy se špatně načítaly české znaky. To jsem odstranil PHP funkcí na převod textu mezi různými znakovými sadami.
36
9.3 Možnosti rozšíření práce Aplikace by se dala do budoucna rozšířit o generování více typů otázek a to o otázky typu dlouhá tvořená odpověď a doplňovací úloha. Dalším rozšířením by mohlo být možnost zadávání reakce na správnou nebo špatnou odpověď.
37
Seznam použité literatury [1] GRUSOVÁ, Lucie. XML pro úplné začátečníky. Vyd. 1. Praha: Computer Press, 2002, 196 s. ISBN 80-722-6697-7. [2] Wikipedia. Moodle [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/Moodle [3] Wikipedia. Extensible Markup Language [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/Extensible_Markup_Language [4] Wikipedia. PSPad [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/PSPad [5] Wikipedia. HyperText MarkUp Language [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/HyperText_Markup_Language [6] Wikipedia. Kaskádové styly [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/Kask%C3%A1dov%C3%A9_styly [7] Wikipedia. PHP [online]. [cit. 2012-05-17]. Dostupné z: http://cs.wikipedia.org/wiki/PHP [8] Wikipedia: Regulární výraz. [online]. [cit. 2012-05-22]. Dostupné z: http://cs.wikipedia.org/wiki/Regul%C3%A1rn%C3%AD_v%C3%BDraz [9] Moodle. [online]. [cit. 2012-05-22]. Dostupné z: http://moodle.cz// [10] MoodleDocs: Questions. [online]. [cit. 2012-05-22]. Dostupné z: http://docs.moodle.org/22/en/Main_page [11] Quiz XML. Moodle XML Converter [online]. [cit. 2012-05-22]. Dostupné z: http://vletools.com/converter/quiz
38
Seznam zkratek XML – Extensible Markup Language PHP – Hypertext Preprocessor CSS – Cascading Style Sheets HTML – HyperText Markup Language GNU - GNU's Not Unix SCORM - Shareable Content Object Reference Model LDAP - Lightweight Directory Access Protocol IMAP - Internet Message Access Protocol SGML - Standard Generalized Markup Language W3C - World Wide Web Consortium UTF-8 – Unicode Transformation Format MDI - multiple document interface XHTML - eXtensible HyperText Markup Language WML - Wireless Markup Language
39
Seznam příloh Zdrojové kódy aplikace a soubor s bakalářskou prací na CD.
40