MediaWiki/Rozšíření/Sémantické extense MediaWiki/Tutoriál

Z Wikiverzity

Sémantické extense MediaWiki/Tutoriál

Sémantické extense MediaWiki (dále jen SMW) umožňují vybudovat sémantickou wiki nad softwarem MediaWiki, na kterém běží naše wikiverzita. Žel, zde dosud tyto extense implementovány nebyly a proto si na příklady budeme muset odskočit do jiného webového prostoru. Nejlépe přímo ke kováři na server Referata, spravovaným přímo jedním z developerů sémantických extenzí MediaWiki.

Tyto sémantické extense jsou založené na datovém modelu RDF a proto vřele doporučuji začít nejprve četbou tohoto článku, kde je uvedený i příklad na rodokmenu Petra, a to až do místa, kde tam je uvedený odskok zpět do tohoto tutoriálu.

Příklad rodokmenu v RDF[editovat]

Všechna fakta, která jsme si uvedli v našem příkladu o Petrovi (viz RDF#příklad rodokmenu) jsou nacpána na stránce:

kam se podíváme.

První rozdíl, kterého si asi na první pohled povšimneme, je, že zatímco jsme dosud byli zvyklí uvádět fakta jako triplety pod sebou, čteme běžný český text, jaký bychom mohli číst ve volně psaném životopisu:

Petr se narodil v roce 1953 v Praze Stanislavovi a Věře. V roce 1976 se pak oženil s Alenou a postupně se jim narodili čtyři syni: Dalibor, Vítek, Slávek a Matěj.

Jsou to celkem dvě stručné věty, ale musíme umět česky a musíme těm větám porozumět, abychom z nich dokázali vyčíst celkem 10 faktů, které bychom si mohli modelovat RDF triplety:

  • Petr - má otce - Stanislava
  • Petr - má matku - Věru
  • Petr - má rok narození - 1953
  • Petr - má místo narození - Praha
  • Petr - má manželku - Alenu
  • Petr - má rok svatby - 1976
  • Petr - má syna - Dalibora
  • Petr - má syna - Vítka
  • Petr - má syna - Slávka
  • Petr - má syna - Matěje

Je to jakýsi ad absurdum dotažený princip tvorby strukturovaných životopisů. Je to ale princip nutný v případě, že chceme, aby stroj "porozuměl" (zvýrazněné uvozovky), co tou větou chceme říci. Jednak proto, že současné stoje ještě lidské řeči moc nerozumí a druhak proto, že lidská řeč není, jak požadoval už Ježíš, ano, ano – ne, ne, ale je sama plna různých nejasností, dvojznačností, je možno ji různě interpretovat. To ji sice přidává na kráse a zajímavosti, ale je to problémem v možnosti nějakého dalšího strojového zpracování, třídění poznatků, přesné dokumentace. Pokud sepisujeme protokol o operaci pacienta, musí být zcela jasné, kdo to byl, pro jako diagnózu se oparace konala, kdo a proč operaci doporučil, jaká byla vyšetření, kdo operaci vykonal, s jakými pomůckami a nástroji, k čemu při ní došlo, s jakým výsledkem atd. atd.

Čteme-li citované dvě české věty pozorně, zjistíme, že v nich je ve skutečnosti obsaženo ještě více informací, než kolik jsme jich excerpovali do uvedených deseti faktů. Jinými slovy, kdybychom z daných deseti RDF faktů měli rekonstruovat původní věty přirozeného jazyka, mohli bychom narazit na různé pochybnosti, např:

  • Pokud má Petr manželku Alenu a rok svatby 1976, je někde řečeno, že si Alenu vzal v roce 1976 anebo že rok 1976 je rok svatby Petra s Alenou? To nikde řečeno není! Dalo by se to vydedukovat v případě, že bychom měli zaručeno, že daný výčet faktů je úplný, že Petr nemá ještě jiné manželky, jiné roky svatby, jiné syny, jiné otce, jiné matky atd. Takovouto úplnost informací jsme ale v praxi málokdy schopni zajistit.

Pokud bychom chtěli informace v tripletech upřesnit, museli bychom je formulovat např. takto:

  • Petr - má rok svatby s Alenou - 1976

Jenže – uvědomme si – bychom takhle museli zavést nový predikát "má rok svatby s Alenou". Což vypadá jako nějaký predikát, který už sám v sobě zahrnuje nějaký vztah k objektu. Což nedává moc smysl. Pak bychom museli mít mnoho různých predikátů ve tvaru "má rok svatby s xy" a na místě xy mít všechny možné objekty. Nejde jenom o Petra, kolik měl či neměl manželek. Jde o to, že takové predikáty bychom měli mít možnost použít v případě Jana, Jiřího, Emila ... atd. – pro všechny možné subjekty. A navíc, i kdybychom vytvořili predikát "má rok svatby s Alenou", pak toto slovo "Alena" naprosto nesouvisí s nějakým objektem Alena. Subjekt i objekt jsou prostě proměnné, které můžeme dosazovat do predikátu, ale nemůžou být jeho součástí. Jak z toho ven?

Obecnějším řešením by bylo koncipovat model např. takto:

  • Petr - má první manželku manželku - Alenu
  • Petr - má rok svatby s první manželkou - 1976

Takto bychom si mohli vytvořit sadu predikátů "má rok svatby s první manželkou", "má rok svatby s druhou manželkou" atd. bez ohledu na to, kolik má/měl/bude mít Petr manželek a tato sada by mohla být obecně použitelná i pro jiné subjekty – dejme tomu pro Stanislava. Pak bychom museli někde definovat, že predikáty má první manželku manželku a má rok svatby s první manželkou se mohou vyskytovat u jednoho subjektu pouze jednou a teprve za těchto formálních předpokladů bychom mohli vyvozovat, že rok 1976 byl skutečně rokem svatby Petra s Alenou.

Avšak ani toto řešení nevypadá ideálně. Nejdříve bychom museli určit, kolik je teoreticky možný maximální počet manželství za jeden život a podle toho si nastavit počet různých predikátů. Dále nevíme, zda by takový model fungoval v zemích, kde je povoleno mnohoženství – co když si jeden muž vezme dvě ženy najednou, která pak je první a která druhá? Ale nakonec cítíme, že číslovky první, druhou atd. bychom měli nahradit čísly a že bychom je mněli brát jako proměnné. Jinými slovy, namísto predikátů se dvěma proměnnými subjektem a objektem – bychom potřebovali predikáty se třemi proměnnými, např. subjektem, objektem1 a objektem2. Pak bychom mohli uvést jednoduše fakt:

  • Petr - má rok svatby s manželkou - Alena - 1976

Anebo – ještě lépe:

  • Petr - Alena - se vzali v roce - 1976

To už ale nejsou triplety subjekt-predikát-objekt, ale nějaké kvadruplety a s tímto modelem se už nevejdeme do RDF. Tím jsme si demonstrovali jedno z omezení, které model RDF má. Jak taková omezení řešit či obejít je již složitější otázka.

Problém převedení takových kvadrupletů na triplety by se dal řešit např. zavedním pojmu událost, což by byl predikát s navázanými dvěma subjekty, např:

  • (svatba: Petr, Alena)

K takové události bychom pak mohli přiřadit datum například takto:

  • (datum události: (svatba: Petr, Alena), 1976)

Ale je možno takový přístup implementovat v rámci modelu RDF? Toť otázka!

RDF a linky na Wikipedii[editovat]

Trochu podobný princip známe z tvorby Wikipedie: Pokud píšeme článek w:Bratři Mašínové, ve kterém použijeme zkratku NDR, tak ta dnes může znamenat všelicos. Proto je nejjednodušší, když přímo do článku uvedeme přímo odkaz na NDR. Podobně když v článku uvedeme jako zdroj knížku, kterou napsal Jan Novák , bylo by hloupé, kdyby došlo k omylu a hokejový fanda, který třeba spisovatele Jana Nováka nezná, by považoval za autora knížky hokejistu Jana Nováka. Zde nám na wikipedii k určení dotyčných "objektů" pomáhají přesné odkazy a rozlišovače. Pomocí smysluplného prolinkování se pak ze souboru jinak nezávislých článků stává více-či-méně jednotná encyklopedie.

Uvedená fakta bychom mohli pomocí RDF tripletů zapsat jako:

  • Bratři Mašínové - mají cosi společného s - NDR
  • Bratři Mašínové - mají cosi společného s - Janem Novákem

Predikát má cosi společného s nám toho moc neřekne a těžko se na základě takových predikátů pokusit stanovit např. pravdivost predikátu

  • NDR - má cosi společného s - Janem Novákem

a dokonce by mohla být problémem i zdánlivě triviální úloha, ověřit obrácený predikát:

  • NDR - má cosi společného s - bratry Mašíny

Vidíme, že v tomhle pohledu se nám model wikipedie zredukoval na relace typu:

  • Bratři Mašínové - je v relaci s - NDR
  • Bratři Mašínové - je v relaci s - Janem Novákem

aniž bychom ovšem ve většině případů mohli nějakým algoritmem odvodit, jakého jsou tyto relace druhu.

Predikáty na SMW[editovat]

Zpátky k Petrovi a jeho rodině: Už tušíme, že predikáty v těchto větách budou mít něco společného s odkazy, a proto nahlédneme do zdrojového textu stránky:

[[firstName::Petr]] se narodil v roce [[birthDate::1953]] v [[birthPlace::Praha|Praze]] [[father::Stanislav]]ovi a [[mother::Věra|Věře]]. V roce [[marriageDate::1976]] se pak oženil s [[wife::Alena|Alenou]] a postupně se jim narodili [[Number::4|čtyři]] syni: [[son::Dalibor]], [[son::Vít]]ek, [[son::Slávek]] a [[son::Matěj]].

Syntaxe [[]] je nám vskutku blízká a na dvojtečky jsme už zvyklí ze jmenných prostorů, např. [[User:Kychot]]. Zde jsou ale neobvyklé dvě dvojtečky za sebou :: a ty nám uvozují, že daný odkaz je predikátem – tedy jaký má – vzhledem k Petrovi – význam. Přepisem do našich RDF tripletů se postupně dozvídáme, že:

  • Petr - má křestní jméno - "Petr"
  • Petr - má datum narození - 1953
  • Petr - má místo narození - Praha
  • Petr - má otce - Stanislava
  • Petr - má matku - Věru
  • Petr - má rok svatby - 1976
  • Petr - má manželku - Alenu
  • Petr - má syna - Dalibora
  • Petr - má syna - Vítka
  • Petr - má syna - Slávka
  • Petr - má syna - Matěje

Nádavkem jsme se dozvěděli, že slovo "čtyři" v textu má význam čísla 4 a že to s Petrem také nějak souvisí; chybí tu však jakákoli explicitní vazba na to, že se jedná o počet jeho synů.

Při tvorbě sémantického webu či sémantické wiky si můžeme teoreticky vymýšlet predikáty, jaké chceme, akorát musíme tento predikát někde deklarovat:

Jmenný prostor Property:[editovat]

Namísto termínu Predikát se ve stejném významu slova často používá termín Property, což lze přeložit jako vlastnost. Rovněž tak v sémantických extenzích MediaWiki. Seznam všech predikátů, použitých na celé wiky, najdeme na speciální stránce Special:Properties. Z námi použitých predikátů tam najdeme:

  1. birthDate of type Date
  2. birthPlace of type Page
  3. father of type Page
  4. firstName of type String
  5. marriageDate of type Date
  6. mother of type Page
  7. son of type Page
  8. wife of type Page

Všimneme si typů jednotlivých predikátů, což jsou v podstatě typy objektů, které predikáty k subjektu vážou:

  • typ String u křestního jména říká, že se prostě jedná o řetězec znaků
  • type Date u data narození a svatby říká, že se jedná o datum (vidíme, že lze uvést pouze rok a stále je to datum – výhoda formátu ISO)
  • type Page – všechny ostatní predikáty jsou odkazy na stránku.

Subjekt predikátu je zde reprezentovaný jeho vlastní stránkou, to znamená, že všechny zde uvedené predikáty se vztahují k tomutu jednomu subjektu a tím pádem není nutné pokaždé uvádět, že subjektem toho kterého predikátu je Petr.

Subjekty a objekty na wiki typicky využívají její hlavní jmenný prostor (pokud si to nenakonfigurujeme jinak). Predikáty naproti tomu mají vyhrazený svůj vlastní jmenný prostor Property:. Pokud tedy chceme vytvořit například predikát father, není nic jednodušího, než mu založit v tomto prostoru vlastní stránku Property:father a na ní stačí uvést jediný odkaz:

 [[Has type::Page]]

(klidně i v rámci libovolného doprovodného textu).

Vidíme, že deklaraci typu u nějakého predikátu jsme použili zase jiný predikát, a to speciální predikát Has type.


Úkol[editovat]

V Petrově ukázkovém rodokmenu jsou uloženy údaje pouze o jediném subjektu – o Petrovi, a to na stránce s názvem "Petr". Pokuste se tam doplnit i výše uvedené triplety odpovídající jeho otci Stanislavovi, případně si vymýšlet další rodinné vztahy.