Jazyk XML

23
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

description

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. - PowerPoint PPT Presentation

Transcript of Jazyk XML

Page 1: 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

Page 2: Jazyk XML

Základní syntaxe XML

<prvek atribut1= ”hodnota1” atribut2=”hodnota2” … >

… obsah prvku ...

</prvek>

<prvek … atributy … />

Zkrácený zápis - pokud je obsah prvku prázdný

Textový jazyk, k vymezení logických částí (prvků) se používají následující značky (tagy):

Speciální znaky&lt; … < ,&gt; … > ,&amp; … & ,&quot; … ” ,

&apos; … ’ ,

&#160; … znak s číslem 160 v Unicode (zde tvrdá mezera)

Page 3: Jazyk XML

Stromová reprezentace

<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‘)

XML dokument: Odpovídající strom:

Page 4: Jazyk XML

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

Výraz A/B se chápe jako „B je synem A“Výraz A//B se 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)

• * - libovolný prvek

Page 5: Jazyk XML

Příklady Xpath (1)

dokument

text(‘\n‘)

odstavec( @sirka = 50 )

text(‘\n bla bla bla\n‘)

odstavec

text(‘\n ble ble\n‘)

text(‘\n‘)

• /dokument

• /dokument/odstavec

• /dokument/text()

• /text()

• //odstavec

Page 6: Jazyk XML

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].

•A[ podmínka ] - takové A, že splňuje danou podmínku.

• a[@href=”neco.html”] - dotaz na hodnotu atributu

• je-li i záporné, počíta se od konce

• div[title!=”nic”] - dotaz na text prvku• tr[position() mod 2=1] - volání spec. fcí.

position() - kolikátý uzel to jelast() - kolik uzlů celkem existujecount(A) - kolik uzlů vytvoří výraz A

Page 7: Jazyk XML

Příklady Xpath(2)

dokument

text(‘\n‘)

odstavec( @sirka = 50 )

text(‘\n bla bla bla\n‘)

odstavec

text(‘\n ble ble\n‘)

text(‘\n‘)

• //odstavec[1]

• //text()[-2]

• //odstavec[@sirka=50]

• //text()[position() = last()]

• //text()[position()mod 2 = 1]

Page 8: Jazyk XML

Princip XSLT

XML xml2html.xsl

xml2wml.xsl

HTML

WMLdalší XML

Page 9: Jazyk XML

Jak funguje XSLT procesorTransformací uzlu budeme rozumět proces, při němž:

• 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.

• Vybereme vyhovující šablonu

Page 10: Jazyk XML

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>

Page 11: Jazyk XML

Š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í

Page 12: Jazyk XML

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/>

Page 13: Jazyk XML

PříkladV 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>

Page 14: Jazyk XML

První řešení

<xsl:stylesheet …… >

<xsl:template match=”zamestnanec”>

<xsl:apply-templates/> <br/>

</xsl:template>

</xsl:stylesheet>

Page 15: Jazyk XML

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.

Page 16: Jazyk XML

xsl:apply-templatesPokud 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=”/dokument” - vybere prvek dokument, který je kořenem stromu. NEBEZPEČNÉ!

• select=”p[2]” - vybere druhý synovský odstavec

Page 17: Jazyk XML

xsl:value-ofVrá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

Page 18: Jazyk XML

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>

Page 19: Jazyk XML

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>

Page 20: Jazyk XML

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>

Page 21: Jazyk XML

Automatické číslováníVýhodné, pokud obsah často měníme - nezapomeneme na to

Použijeme funkci position()

<xsl:template ...>

<xsl:value-of select=”position()”>

… pokračování ...

Page 22: Jazyk XML

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“>

...

Page 23: Jazyk XML

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