Syntax highlighting of Archiv/Databázové modely a jazyky/Odborne

== XML data v relacích, indexace XML dat, podobnost XML dat, XML a webové služby.  (nové od 2011) (🎓🎓🎓) ==
{{Zkazky|
* '''xPath (Pokorny)''' - 2009 
* '''XQuery a XSLT (Mlýnková) 2010''' - Popsat co to je a k čemu to je. Stačí vědět jak to funguje, není nutný znát help zpaměti. Vědět jakou má který jazyk sílu a co umí. A pak vědět, že jsou vzásadě ekvivalentní. Akorát že XSLT umí přepínat mezi různými výstupními soubory. 
* '''Technologie XML 2010''' - největší zádrhel mých státnic - přestože jsem znal co je a na co je a v principu jak se používá XML, SGML, DTD, XML Schema, XPath, XQuery, XSLT, DOM, SAX, docela chtěl zkoušející vědět, jak přesně (i když zase ne úplně syntakticky přesně) se něco konkrétního zapíše v XSLT nebo v XML Schema, což jsem přesně nevěděl; snažil jsem se říct princip (že v XML Schema např. určuju, co může daný element obsahovat skrze typy, co se může jak opakovat, atd., že v XSLT mám naskládány šablony a k nim příslušející XPath), leč to nestačilo, chtěl vidět konkrétní (polo-konkrétní) zápis a konkrétně jak se to vyhodnocuje krok za krokem, což jsem pořád nebyl schopen moc přesně napsat a popsat. Nakonec jsem to nějak ukoulel na 3 matným vzpomínáním na to, jak jsem někdy před šesti lety něco dělal v XSLT... Docela zrádná otázka, doporučuju na to dávat bacha. Viděl jsem nějaké zápisky, kde někdo tvrdí, že "stačí slajdy z 1. přednášky", no, myslím, že určitě nestačí. 
** v tehle otazce je potreba znat XSLT, XPath a to vcetne prikladu
}}
{{TODO|umravnit a zkonfrontovat}}
=== Indexace XML ===
Metody indexace
:Indexace úplného textu
::nevýhoda: nelze dotazovat podle struktury
:Indexace relací klasicky (Lore) ???
:: http://infolab.stanford.edu/lore/
:Číselná schémata
::indexování založené na pozicích
:::použití absolutních resp. relativních adres pro reprezentaci pozic slov a značek v XML dokumentu
::Dietzovo číslování
::...
:...


;Absolutní souřadnice regionu (ARC)
:D( S, E )
::D : číslo dokumentu
::S : počátečni pozice, E : koncová pozice v dokumentu
:výhody: pro dotazování
:nevýhody: aktualizace v listu znamená, že všechny následníky je třeba změnit také
:[[File:XML_indexing-ARC.PNG]]


;Relativní souřadnice regionu (RRC)
:RRC uzlu n v XML stromu: [ c1, c2 ]
::c1 : počet byte z počáteční pozice rodičovského uzlu k počáteční pozici n
::c2 : počet byte z počáteční pozice rodičovského uzlu ke koncové pozici uzlu n
:výhoda: aktualizace je menší oproti ARC
:[[File:XML_indexing-RRC2.PNG]]


;Dietzovo číslování
:Preorder průchod - potomci každého uzlu následují při preorder průchodu stromem za svým rodičovským uzlem
:Postorder průchod - každý uzel posloupnosti je uveden až za svými potomky
:Konstrukce číselného schématu
::každému uzlu v∈N přiřadíme dvojici (x,y) značící preorder resp. postorder pořadí
::uzel v∈N s ohodnocením L(v) = (x,y) je potomkem uzlu L(u) = (x',y') právě když x' < x & y' > y
:[[File:XML_indexing-Dietz.PNG]]

===  Podobnost XML dat ===
;Typ dat
:Podobnost dokumentů
:Podobnost schémat
:Podobnost dokumentů a schémat

==== Podobnost XML dokumentů ====
;Idea
:Vstup: Dokumenty D1 a D2
:Výstup: sim(D1, D2) ∈ [0,1]
:Přístupy:
:*Zjistíme jak složité je transformovat dokument D1 na D2
:**''Editační vzdálenost stromů'' T1 na T2
:*Definujeme reprezentaci D1 a D2, která umožní '''efektivní''' vyhodnocení podobnosti
:**Př. reprezentace ''množinou cest'', reprezentace ''signálem'', …


'''Editační vzdálenost'''

(pro stromy) minimální počet operací pro transformaci stromu T1 na strom T2
;Editační operace na XML stromech
:Insert - vloží uzel n na pozici danou rodičovským uzlem p a pořadím určujícím pozici v rámci podelementů p
:Delete - smaže listový uzel n
:Relabel - přeznačí uzel n
:InsertTree - vloží celý podstrom T na pozici danou rodičovským uzlem p a pořadím určujícím pozici v rámci podelementů p
:DeleteTree - celý podstrom T s kořenem n je smazán
Minimální editační vzdálenost se jaksi vyhodnocuje pomoci dynamickeho programovani


'''Tree Alignment'''

Obdoba editační vzdálenosti

Myšlenka: Pro stromy T1 a T2 vybudujeme tzv. alignment
*Do obou stromů vložíme uzly tak, aby výsledné stromy T1’ a T2’ měly stejnou strukturu (bez ohledu na označení), tj. pokud bychom je přiložili na sebe, překrývaly by se
;Postup:
:Vybudujeme alignment
:Každé dvojici překrývajících se uzlů přiřadíme skóre
:Vzdálenost stromů = součet skóre


Obe dve transformace dokumentu jsou NP-tezke (tipl bych si, ze jsou primo slabe NP-tezke)
:Hledání minimální editační vzdálenosti XML stromů je obecně NP-těžký problém
:Tree Alignment: pokud je stupeň stromu omezený, lze minimální vzdálenost nalézt v polynomiálním čase, jinak je to NP-těžký problém.


'''Reprezentace množinami cest'''

Myšlenka: XML strom = množina cest

Které cesty budeme brát?
:Všechny různé cesty z kořene do listu
:Všechny různé cesty z kořene do listu a všechny jejich pod-cesty
:Všechny různé cesty z kořene do listu a všechny jejich pod-cesty + informace o četnosti
Problém podobnosti stromů se redukuje na určení velikosti průniku množin cest

Poznámka: Přístup ignoruje uspořádání


'''Signál XML dokumentu'''

Myšlenka: XML dokument reprezentujeme jako signál (impuls = počáteční/koncový tag)

Problém podobnosti XML dokumentů jsme převedli na problém podobnosti signálů
;Postup
:Signály jsou periodicky zopakovány (asi aby byly stejne dlouhe)
:Je na ně aplikována diskrétní Fourierova transformace
:Výsledek je lineárně interpolován

==== Podobnost XML dokumentů a schémat ====
Problém: Chceme porovnat podobnost XML dokumentu D (stromu) a XML schématu S (množina regulárních výrazů)

Možná myšlenka: z dokumentů odvodíme schéma a porovnáme schémata (prozatím se nevyužívá a potřebovali bychom hodně dokumentů)

Existující přístupy:
*Metoda měřící počet elementů, které se vyskytují v D, ale ne v S a naopak
*Metoda, měřící nejkratší vzdálenost mezi D a „všemi“ dokumenty validními vůči S

==== Podobnost XML schémat ====
Problém: podobnost regulární výrazů, resp. gramatik

Typické použití je integrace XML schémat - několik systémů poskytuje stejná (podobná) data v různých formátech → chceme sjednotit do společného
schématu (XML Schema, relační, objektové, …)

;Obecná myšlenka:
:Definujeme množinu pomocných podobnostních funkcí (matchers), kde každá vyhodnocuje podobnost určité charakteristiky (např. podobnost listů, podobnost jmen kořenových elementů, podobnost kontextu, …)
:Výsledky podobnostních funkcí jsou (váženě) agregovány do výsledné podobnosti
Poznámka: Velké množství metod využívá strojové učení (např. pro nastavení vah, pro vyhodnocování, …)

Algoritmy:
:Cupid - dvě fáze vyhodnocování (lingvistická a strukturální)
:COMA - kombinace velké množiny matcherů s uživatelskou interakcí

Matching velkých schémat
:Problém: U velkých schémat nechceme matchovat každý uzel s každým
:Myšlenka: Dekomponujeme problém do menších a jejich výsledky sloučíme

==== XML a webové služby ====
* http://cs.wikipedia.org/wiki/Webov%C3%A1_slu%C5%BEba
* http://cs.wikipedia.org/wiki/SOAP
* http://cs.wikipedia.org/wiki/Web_Services_Description_Language

== Datový model RDF, dotazovací jazyk SPARQL ==
===RDF===
RDF (Resource Description Framework) Dátový model tvorený orientovaným grafom ( bez násobných hrán)- prostředí na popis (webovských) zdrojů. Uložený v XML

Rozlišujeme Zdroj( moze mat vlasnosti), Prázdny uzol a literál ( Dátová hodnota ktorá nie je zdroj , môže mat dátový typ )<br />


RDF graf je možné reprezentovať : Množinou, Graficky, Slovami v abecede, Gramatikom , najčastejšie sa používa zoznam trojíc ('''s'''ubject,'''p'''redicate,'''o'''bject)

Forma zápisu je N3 notácia, zložitý formalizmus alebo používanejšia Turtle:
* Turtle : URI ( jedinečná identifikácia ) v hranatých zátvorkách , forma prefixovej skratky
* Literály v úvodzovkách
* Trojice uzatvorené bodkou
* Mezery, eol, … se ignorují
* Opakujúce hodnoty môžeme vynechať, oddeľovať nie . ale ;
* Viac trojíc s rovnakým subjekt a predicate oddeľovať objekty ,
* Môžeme redukovať uzly na prázdne uzly , takýto uzol má lokálne meno ale nemá url<br />
[[Soubor:Rdf.png|thumb|Rdf graf<br>
ex:index.html 	dc:creator	ex:staffid/85740<br>
ex:staffid/85740 	ex:maJmeno 	“John Smith”
]]

'''Prázdne uzly:'''
 exstaff:85740 	exterms:address 	??? .  
 ??? 		exterms:street 		"1501 Grant Avenue" .  
 ??? 		exterms:city 		"Bedford" .  
RDF informuje o typoch , tz tvrdenia o tvrdeni 
 exproducts:triple123      rdf:type           rdf:Statement .  
 exproducts:triple123      rdf:subject        ex:index.html . 
Vyuzitie pri vyhladavacoch, kniznice, eshopy

Zdroje

http://www.ksi.mff.cuni.cz/~pokorny/dj/prezentace/1_34.ppt
http://www.w3schools.com/webservices/ws_rdf_example.asp

===RDF Schema===
Rožšírenie RDF o triedy pre zdroje, zavedenie dedičnosti( len fw, nedefinuje žiadne triedy)

===SPARQL===
Dotazovanie nad RDF datami. Hladaju sa zdroje s istymi vlastnostami . Syntax velmi podobna ako v SQL
<br />

SELECT ?(čo) <br />
WHERE { predikat, trojica splnajuca vlastno ?(čo) má vlastnosť. }
<br />
Construct: vratia RDF graf tvoreny substituciou za premene <br />
ASK: Vracia true/false ak bol vzor najdeny alebo nie <br />
DESCRIBE : Vracia RDF graf, ktory popisuje najdene zdroje <br />
OPTIONAL : Prida dodatocnu informaciu ale nefailne ked nenajde vhodne. 
<br />
Data
<br />
 _:a foaf:name "Alice" .
 _:a foaf:knows _:b .
 _:a foaf:knows _:c .
 _:b foaf:name "Bob" .
 _:c foaf:name "Clare" .
 _:c foaf:nick "CT" .

<br />
Dotazy
 
  <br />
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
 SELECT ?nameX ?nameY ?nickY
 WHERE { ?x foaf:knows ?y ;
 ?x foaf:name ?nameX .
 ?y foaf:name ?nameY .
 OPTIONAL { ?y foaf:nick ?nickY } }

Vysledok

{| class="wikitable"
|-
! ?nameX !! ?nameY !! ?nickY
|-

|-
| Alice|| Bob|| Prazdny vysledok, nieje to null
|-
| Alice || Clare || CT
|}

Pekne jednoduche dotazy [https://jena.apache.org/tutorials/sparql.html]

{{:Databázové_modely_a_jazyky/MMDB}}