1 / 23

Jazyk XML

Jazyk XML. Jazyk pro tvorbu strukturovaných dokumentů. Syntaxí velmi podobný HTML. Hlavní cíle návrhu:. Snadná editace - jazyk je textový. Snadné strojové zpracování - jednoduchá syntaxe. Základní syntaxe XML.

erasto
Download Presentation

Jazyk XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Jazyk XML • Jazyk pro tvorbu strukturovaných dokumentů • Syntaxí velmi podobný HTML Hlavní cíle návrhu: • Snadná editace - jazyk je textový • Snadné strojové zpracování - jednoduchá syntaxe

  2. Základní syntaxe XML Textový jazyk, k vymezení logických částí (prvků) se používají následující značky (tagy): • <prvek atribut1= ”hodnota1” atribut2=”hodnota2” … > • … obsah prvku ... • </prvek> Zkrácený zápis - pokud je obsah prvku prázdný <prvek… atributy …/> Speciální znaky &lt; … < ,&gt; … > ,&amp; … & ,&quot; … ” , &apos; … ’ , &#160; … znak s číslem 160 v Unicode (zde tvrdá mezera)

  3. Stromová reprezentace XML dokument: Odpovídající strom: <dokument> <odstavec sirka=“50“> bla bla bla </odstavec> <odstavec> ble ble </odstavec> </dokument> dokument text(‘\n‘) odstavec( @sirka = 50 ) text(‘\n bla bla bla\n‘) odstavec text(‘\n ble ble\n‘) text(‘\n‘)

  4. Základy Xpath (1) • Výrazy popisující ”cestu” ve stromu • Jednotlivé kroky se oddělují lomítky a mohou být: • název prvku, např. odstavec • text()- odpovídátext(…)v stromu • .- odkaz na sebe sama • ..- odkaz na otce • * - libovolný prvek VýrazA/Bse chápe jako „B je synem A“ VýrazA//Bse chápe jako „B je potomkem A“ Cesty mohou být absolutní (popisují cestu od kořene, začínají lomítkem) relativní (popisují cestu od pevně zvoleného uzlu, nezačínají lomítkem)

  5. Příklady Xpath (1) • /dokument dokument text(‘\n‘) • /dokument/odstavec odstavec( @sirka = 50 ) • /dokument/text() text(‘\n bla bla bla\n‘) odstavec • /text() text(‘\n ble ble\n‘) • //odstavec text(‘\n‘)

  6. Základy Xpath(2) Na konci každého kroku se mohou objevit predikáty: • A[ i ]- i-tý uzel splňující A, např. text()[2]. • je-li i záporné, počíta se od konce • A[ podmínka]- takové A, že splňuje danou podmínku. • a[@href=”neco.html”] - dotaz na hodnotu atributu • div[title!=”nic”] - dotaz na text prvku • tr[position() mod 2=1] - volání spec. fcí. position() - kolikátý uzel to je last() - kolik uzlů celkem existuje count(A) - kolik uzlů vytvoří výraz A

  7. Příklady Xpath(2) • //odstavec[1] dokument text(‘\n‘) • //text()[-2] odstavec( @sirka = 50 ) • //odstavec[@sirka=50] text(‘\n bla bla bla\n‘) odstavec • //text()[position() = last()] text(‘\n ble ble\n‘) • //text()[position() mod 2 = 1] text(‘\n‘)

  8. Princip XSLT XML xml2html.xsl HTML další XML WML xml2wml.xsl

  9. Jak funguje XSLT procesor Transformací uzlu budeme rozumět proces, při němž: • Vybereme vyhovující šablonu • Pokud taková neexistuje, použije se implicitní • Vytvoříme nový strom(les) podle příkazů uvnitř a ten vrátíme jako výsledek Transformací dokumentu pak bude transformace kořene stromu dokumentu.

  10. Formát XSLT souboru XSLT je instancí XML, tj. jedná se o XML soubory, ale XSLT jim dává význam <?xml version=”1.0”?> <xsl:stylesheet version=”1.0” xmlns=”http://www.w3.org/1999/XSL/Transform”> … šablony ... </xsl:stylesheet>

  11. Šablony - xsl:template <xsl:template match=”...výraz...”> … příkazy ... </xsl:template> Šablona je vyhovující (pro uzel u), pokud: • výraz je absolutní cesta a odpovídá uzlu u • výraz je relativní cesta a existuje uzel v, tak, že výraz odpovídá relativní cestě z v do uzlu u • je-li více kandidátů, vybere se ta, která byla v XSLT napsána jako poslední

  12. Příkazy v šablonách • textové uzly se okopírují • prvky, které nezačínají na ‘xsl:’, se také okopírují • prvky, které začínají na ‘xsl:’, jsou speciální • <xsl:apply-templates/> provede transformace synů a vrátí takto získané stromy • další uvidíme později Implicitní pravidla • textové uzly se okopírují • u prvků je chování identické s šablonou s jediným příkazem <xsl:apply-templates/>

  13. Příklad V XML si budeme uchovávat informace o zaměstnancích - pro začátek jméno a příjmení <zamestnanci> <zamestnanec> <jmeno>Josef</jmeno> <prijmeni>Novak</prijmeni> </zamestnanec> … další zaměstnanci ... </zamestnanci>

  14. První řešení <xsl:stylesheet …… > <xsl:template match=”zamestnanec”> <xsl:apply-templates/> <br/> </xsl:template> </xsl:stylesheet>

  15. Problémy • Pokud zaměníme pořadí jmena a prijmeni v XML, ovlivní to výstup • Pokud mezi jmenem a prijmenim v XML, nebude mezera, jméno a příjmení se slijí • Pokud přidáme další položky pro zaměstnance(e-mail apod.), přestane to fungovat.

  16. xsl:apply-templates Pokud specifikujeme atribut select, provede se rekurze jen na uzly, které vyhovují cestě uvedené v select. • select=”p”- vybere všechny synovské odstavce • select=”.//p”- vybere všechny odstavce, které jsou potomky aktuálního uzlu • select=”p[2]” - vybere druhý synovský odstavec • select=”/dokument” - vybere prvek dokument, který je kořenem stromu. NEBEZPEČNÉ!

  17. xsl:value-of Vrátí text, který vznikne vynecháním značek v obsahu prvního uzlu, který bude vybrán atributem select • <xsl:value-of select=”.”> - vrátí text z akt. uzlu • <xsl:value-of select=”p”> - vrátí text z 1. synovského odstavce • <xsl:value-of select=”@href”> - vrátí hodnotu atributu href

  18. Vylepšené řešení <xsl:stylesheet …… > <xsl:template match=”zamestnanec”> <xsl:value-of select=”jmeno”/> <xsl:value-of select=”prijmeni”/> <br/> </xsl:template> </xsl:stylesheet>

  19. Změna designu <xsl:stylesheet …… > <xsl:template match=”zamestnanec”> <li> <xsl:value-of select=”jmeno”/> <xsl:value-of select=”prijmeni”/> </li> </xsl:template> <xsl:template match=”zamestnanec”> <ul><xsl:apply-templates/></ul> </xsl:template> </xsl:stylesheet>

  20. xsl:attribute • přidá atribut k prvku, do kterého je vnořen • jméno se získá z atributu name, hodnota z obsahu prvku <xsl:template match="email"> <a> <xsl:attribute name="href"> mailto:<xsl:value-of select="."/> </xsl:attribute> <xsl:value-of select="."/> </a> </xsl:template>

  21. Automatické číslování Výhodné, pokud obsah často měníme - nezapomeneme na to Použijeme funkciposition() <xsl:template ...> <xsl:value-of select=”position()”> … pokračování ...

  22. Volání pojmenovaných šablon Šablonu lze pojmenovat pomocí atributu name - musí být unikátní v dokumentu K volání slouží xsl:call-template <xsl:template name=“id1“> … obsah … <xsl:template … > <xsl:call-template name=“id1“> ...

  23. Parametry při volání šablon Parametr se deklaruje ve volané šabloně: <xsl:param name=”p1”>implicitní hodnota</xsl:param> Hodnota se specifikuje při volání <xsl:call-template name=”t1”> <xsl:with-param name=”p1”>jiná hodnota</xsl:param> </xsl:call-template> K hodnotě proměnné se dostaneme přes$p1

More Related