PB138cv/Cv6
Z FI WIKI
Obsah
Schematron
RELAX NG
- RelaxNG HP
- OasisOpen
- Tutoriál na zvonu - porovnání s XML schema
XPath
- pro odkázání se na určitý element uvnitř dokumentu.
- není to XML (podobné např. URI).
- definuje základní identifikátory a funkce pro výběry jednotlivých uzlů (tj. elementy, textové uzly, jejich množiny či sekvence).
- viz:
- Podrobněji popsáno v přednáškových skriptech na IS
- Popis standardu 1.0 na W3C. Návrh verze 2.0
- Tutoriál na W3Schools
- Tutoriál na zvon.org
Cesta
- Absolutní
- Plná cesta - Začne jedním lomítkem. Cestu k našemu elementu pak vyznačujeme pomocí jeho nadřazených elementů, oddělených dalšími lomítky. Úvodní lomítko vyjadřuje "kořen dokumentu", proto první element v takovéto cestě musí být element kořenový. V případě, že je takovýchto elementů s danou cestou více, jsou takto vybrány všechny. Cesta
/aaa/bbb
označí toto:
- Plná cesta - Začne jedním lomítkem. Cestu k našemu elementu pak vyznačujeme pomocí jeho nadřazených elementů, oddělených dalšími lomítky. Úvodní lomítko vyjadřuje "kořen dokumentu", proto první element v takovéto cestě musí být element kořenový. V případě, že je takovýchto elementů s danou cestou více, jsou takto vybrány všechny. Cesta
<aaa> <ccc/> <bbb> <ddd/> </bbb> <eee> <bbb/> </aaa>
- Zjednodušená cesta - Začne dvěma lomítky. Cesta pak vyjadřuje veškeré skupiny elementů a podelementů vyjádřené ostatní cestou v celé hierarchii dokumentu. První označení elementu pak není kořenový, ale ten, který nás první zajímá. (V případě, že je takovýchto elementů s danou cestou více, jsou takto vybrány všechny.) Například cesta
//bbb
vybere všechny elementy bbb, a jsou v hierarchii dokumentu na jakémkoli místě, jakkoli hluboko.
- Zjednodušená cesta - Začne dvěma lomítky. Cesta pak vyjadřuje veškeré skupiny elementů a podelementů vyjádřené ostatní cestou v celé hierarchii dokumentu. První označení elementu pak není kořenový, ale ten, který nás první zajímá. (V případě, že je takovýchto elementů s danou cestou více, jsou takto vybrány všechny.) Například cesta
- Relativní - začíná vždy označením elementu. Zatímco absolutní cesta pracuje od kořene elementu, relativní pracuje od "kontextového uzlu". Uzlu, kde se právě vyskytujeme (a který byl např. předtím vybrán pomocí absolutní adresace).
Predikáty
- určují element, který se má vybrat - v případě, že nám výraz cesty dá množinu.
- např. boolean (existence, neexistence atributu), zadání jména atributu či elementu/uzlu, číslo...
-
cesta/element[x]
x-tý výskyt hledaneho_elementu -
cesta/element[last()]
- poslední výskyt -
cesta/element[@jmeno]
- element, který má atributjmeno
-
cesta/element[@*]
- element, který má jakýkoli atribut -
cesta/element[not(@prijmeni)]
- nemá atribut příjmení -
cesta/element[@jmeno="Kokrment"]
- element, který má atribut jmeno se zadanou hodnotou -
cesta/element[count(oi)=2]
- element, který má počet podelementůoi
právě 2
-
- zástupné značky
-
*
- všechny uzly či atributy -
.
- kontextový uzel-
name()
- jméno kontextového elementu
-
-
..
- nadřazený uzel -
string-length(retezec)
- délka- atd.
-
- např. boolean (existence, neexistence atributu), zadání jména atributu či elementu/uzlu, číslo...
Osy
- vyjadřují směr prohledávání od kontextového uzlu
- dítě se jménem jmeno:
child::jmeno
- všichni rodiče:
parent::*
- atd. - viz tutoriály (sourozenci, potomci, atributy, textové uzly, všechny předchozí uzly)
XLink
- Jazyk pro odkazování se mezi dokumenty, nebo v rámci dokumentu. Používá jmenné prostory kvůli tomu, abychom kvůli odkazům nemuseli měnit schémata dokumentů. Dělí se na definici adresy (zdroj) a definici odkazu.
- Není více rozšířen ( XML linking language, Cover Pages XLink, Zvon.org XLink referenční příručka, Zvon.org XLink příklady
HLink - specifikace vycházející z XLink, pro XHTML).
- simple - jednoduchý 1-1 odkaz. Definován atributem xlink:type="simple" Příklad:
<elsw:dokument xmlns:elsw = "http://nlp.fi.muni.cz/projekty/elsw/" xmlns:xlink = "http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="docs/dokument.pdf" />
- extended - obecně svázáno n-m zdrojů. Definován atributem xlink:type="extended". Může se odkazovat na cizí dokumenty (locator), nebo sám do svého (resource). Resource určuje to, na co se chceme odněkud odkazovat. Locator je místo, odkud se chceme odkazovat (jinam).
Resource:
<student xlink:label="Jan Novák" xlink:type="resource" xlink:role="http://www.example.com/linkprops/student" xlink:title="Mgr. Jan Novák">3.5</student>
Locator1:
<osoba xlink:label="A" xlink:type="locator" xlink:role="http://www.example.com/linkprops/student" xlink:title="Mgr. Jan Novák" xlink:href="studenti/jan_novak.xml"/>
Locator2:
<osoba xlink:label="B" xlink:type="locator" xlink:role="http://www.example.com/linkprops/student" xlink:title="Irena Nováková" xlink:href="studenti/irena_novakova.xml"/>
A z nich vytvoříme třeba takto odkaz:
<odkaz xlink:from="A" xlink:to="B" xlink:type="arc"/>
XPointer
Využívá jej (například) XLink, pro ukazování dovnitř dokumentu. Samotný XPointer používá k adresaci uzlů dokumentu XPath. Informace: Zvon.org XPointer tutoriál, slídy z přednášek.
Použití XPath v Javě
- JAXP - XPath API...
- Saxon - SAX-parser a XSLT procesor
- V něm existuje třída
net.sf.saxon.xpath.XPathEvaluatorve
které se opět vyskytují podobné metody -evaluate()
, vracející List uzlů aevaluateSingle()
pro vrácení prvního uzlu. V případě výběru uzlu vrací NodeInfo, jinak atomické hodnoty.
- V něm existuje třída
- Xalan - další parser
- ApplyXPath utilita možno použít pro kontrolu XPath řetězců
- DOM4J
Příklad
- Mějme tento zkušební XML soubor - screen.xml. Vytvořte k němu postupně:
- Tři různé XPath struktury, které vyberou element <menuitem text="Otevřít..." icon="/icon/open.gif" action="openFileDialog(thinlet)" />
- XPath stukturu, která vybere všechny <separator/>
- XPath stukturu, která vybere celé menu Zobrazit - tj. element na řádku 24 a jeho podelementy.
- Tlačítka (element button), která mají přidělenou akci (atribut action)
- Který element vybere z dokumentu screen.xml tento xpointer řetězec? xpointer(//menu[@text="Nápověda"]/*[3]) element(/2/1)
- Vytvořte simple-xlink odkaz, odkazující se na tlačítko "Zpět" (element na řádku 45)