Δικησοκενηρικά Πληροθοριακά Σσζηήμαηα Εργαζηήριο 4: XSLT Μαρίνος Θεμιζηοκλέοσς Αλδξνύηζνπ 150 Γξαθείν 206 Τει. 210 414 2723 Email: mthemist@unipi.gr Ώξεο Γξαθείνπ: Δεπηέξα 11-12 AM
Extensible Stylesheet Language (XSL)
XSL XSL : ρξεζηκνπνηείηαη γηα ηε κνξθνπνίεζε XML αξρείσλ ζε TeX, RTF, ps, HTML,, XML θιπ Απνηειείηαη από XSLT: Γιώζζα κεηαηξνπήο από κία κνξθή ζε άιιε XSL γηα κεηαηξνπή θαη κνξθνπνίεζε αληηθεηκέλσλ θαη semantics Απαηηείηαη εηδηθόο XSL επεμεξγαζηήο
Τα Σσζηαηικά ηης XSL XSL απνηειείηαη από 3 ζπζηαηηθέο γιώζζεο (W3C recommendations) XSLT: XSL Transformations language (πεξηγξάθεη ηε κεηαηξνπή ελόο XML αξρείνπ πνπ αλαπαξίζηαηαη ζε κνξθή δέληξνπ- ζε άιιε κνξθή) XPath A Formatting Language: εκθαλίδεη ηα απνηειέζκαηα ζηελ νζόλε, ή ζε έληππε κνξθή, ή ζε άιιε κνξθή (speech/other media)
Πιθανά Σενάρια Μεηαηροπής XML
Τι κάνει ηο Stylesheet; Τν stylesheet θαζνξίδεη ηε κνξθή παξνπζίαζεο ηεο XML πιεξνθνξίαο ρξεζηκνπνηώληαο 2 ηερληθέο: Επηιεθηηθή κεηάθξαζε ηνπ αξρείνπ εηζόδνπ ζε άιιε δνκή Πεξηγξαθή ηνπ ηξόπνπ παξνπζίαζεο ηεο πιεξνθνξίαο πνπ κεηαθξάδεηαη (πρ πξνζδηνξίδεη ηη properties ζρεηίδνληαη κε ηα δηάθνξα ηκήκαηα ηεο πιεξνθνξίαο3 πνπ κεηαθξάδεηαη)
Δσναηόηηηες Μεηάθραζης Παξαγσγή ζηαζεξνύ θεηκέλνπ Απόθξπςε πεξηερνκέλνπ Μεηαθίλεζε θεηκέλνπ (π.ρ. Όλνκα επώλπκν) Αληηγξαθή θεηκέλνπ (π.ρ. Γηα ηε δεκηνπξγία πίλαθα πεξηερνκέλσλ) Ταμηλόκεζε Πνιύπινθεο κεηαθξάζεηο πνπ ππνινγίδνπλ θάπνηεο πιεξνθνξίεο κε βάζε θάπνηα δεδνκέλα εηζόδνπ ή άιια δεδνκέλα.
Περιγραθή Πληροθορίας Πεξηγξαθή ηνπ ηξόπνπ παξνπζίαζεο ηνπ θεηκέλνπ Τξηα επίπεδα κνξθνπνίεζεο: Πξνζδηνξηζκό ο ηνπ layout ηεο νζόλεο ζειίδαο Αλάζεζε ηνπ θεηκέλνπ ηνπ κεηάθξαζε ζε βαζηθνύο ηύπνπο content container types (π.ρ. Λίζηεο, παξαγξάθνπο, θιπ) Πξνζδηνξηζκό ησλ ηδηνηήησλ κνξθνπνίεζεο (spacing, margins, alignment, fonts, etc.)
XML και Δένηρο Αποηελεζμάηων Έλα XSL stylesheet κεηαηξέπεη ηα δέληξα ησλ αξρείσλ εηζόδνπ ζε κία δνκή πνπ νλνκάδεηαη result tree θαη ε νπνία απνηειείηαη από ηα result objects
XSL Stylesheets Έλα XSL stylesheet απνηειείηαη από έλα ζύλνιν templates Κάζε template αληηζηνηρεί νξηζκέλα ζύλνια ζηνηρείσλ - elements ηνπ δέληξνπ πεγήο θαη κεηά πεξηγξάθεη ηε ζεκαζίαο ηεο αληηζηνίρηζεο ζην result tree Γεληθά, ηα elements ηνπ stylesheet ζην "xsl" namespace είλαη κέξνο ηεο XSLT, Τα non-xsl elements ελόο template είλαη όηη ρξεζηκνπνηείηαη ζην result tree
Δομή ενός Stylesheet Τα XSL Stylesheets είναι αρτεία XML Namespaces (http://www.w3.org/tr/rec-xmlnames) ρξεζηκνπνηνύληαη γηα ηνλ πξνζδηνξηζκό ζεκαζηνινγηώλ ζεκαληηθώλ ζηνηρείσλ (semantically significant elements) Τα πεξηζζόηεξα stylesheets είλαη stand-alone αξρεία <xsl:stylesheet> ή <xsl:transform>
Παράδειγμα XSL Templates <?xml version= 1.0?> <xsl:stylesheet version= 1.0 xmlns:xsl= http://www.w3.org/1999/xsl/transform > <xsl:template match= / > <html> <head> </head> <body> </body> </html> </xsl:template> </xsl:stylesheet>
<html> <head> </head> <body> </body> </html> Αποηέλεζμα XSL
XSL Templates (II) <?xml version= 1.0?> <xsl:stylesheet version= 1.0 xmlns:xsl= http://www.w3.org/1999/xsl/transform > <xsl:template match= / > <html> <xsl:apply templates/> </html> </xsl:template> <xsl:template match= Ingredients > Ingredients List </xsl:template> </xsl:stylesheet> Επαλαιακβαλόκελε επεμεξγαζία γηα όινπο ηνπο θόκβνπο Ο XSL processor παξάγεη κία ιίζηα γηα θάζε εκθάληζε ηνπ tag Ingredients ζην αξρείν εηζόδνπ
ΧSLT Extensible Stylesheet language ρξεζηκνπνηείηαη γηα ηνλ κεηαζρεκαηηζκό ησλ αξρείσλ XML, Η XSL Transformation Language (XSLT) ρξεζηκνπνηείηαη γηα ηνλ κεηαζρεκαηηζκό ησλ αξρείσλ XML από κηα κνξθή ζε άιιε.
ΧSLT Η XSLT ρξεζηκνπνηεί ην XPath γηα λα αληηπαξαβάιιεη ηνπο θόκβνπο ηεο κεηαηξνπήο ελόο XML αξρείνπ ζε έλα δηαθνξεηηθό αξρείν, Τν λέν αξρείν κπνξεί λα είλαη XML, HTML, απιό θείκελν ή άιιν text.
ΧSLT H XSLT ρξεζηκνπνηεί XPath γηα λα θαζνξίζεη ηα κέξε ηνπ εγγξάθνπ πεγήο πνπ πξέπεη λα ηαηξηάμεη κε έλα ή πεξηζζόηεξα πξνθαζνξηζκέλα πξόηππα. Όηαλ κηα αληηζηνηρία βξεζεί, ε XSLT ζα κεηαζρεκαηίζεη ην έγγξαθν (ηαηξηάδνληαο ην κε κέξνο ηνπ εγγξάθνπ πεγήο) θαη δεκηνπξγώληαο ην έγγξαθν απνηειέζκαηνο.
ΧSLT Τν root element πνπ δειώλεη ην έγγξαθν γηα λα είλαη έλα XSL έγγξαθν είλαη <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transf orm"> Ή: <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transf orm">
Παξάδεηγκα: ΧSLT <?xml version="1.0" encoding="iso-8859-1"?> <catalog> <cd> <title> Anapoda </title> <artist> Xatzigiannis </artist> <country>greece</country> <company> Universal Music </company> <price>20</price> <year>2009</year> </cd>. </catalog>
ΧSLT Έπεηηα δεκηνπξγείο έλα XSL Style Sheet ("cdcatalog.xsl") κε έλα πξόηππν κεηαζρεκαηηζκνύ.
<?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> </xsl:stylesheet> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template>
ΧSLT Πξνζζέηεηο ην XSL style sheet reference ζην XML αξρείν ("cdcatalog.xml"): <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> <cd> <title> Paparazzi </title> <artist> LadyGaga</artist> <country>usa</country> <company> SonyMusic</company> <price>20</price> <year>2010</year> </cd>
Παξάδεηγκα: ΧSLT <?xml version="1.0" encoding="iso-8859-1"?> <catalog> <cd> <title> Paparazzi </title> <artist> LadyGaga</artist> <country>usa</country> <company> SonyMusic</company> <price>20</price> <year>2010</year> </cd>. </catalog>
http://www.w3schools.com/xsl/try xslt.asp?xmlfile=cdcatalog&xsltfil e=cdcatalog
Παξάδεηγκα: ΧSLT <?xml version="1.0" encoding="iso-8859-1"?> <!-- Edited by XMLSpy --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
ΧSLT
XSLT <xsl:template> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
ΧSLT
XSLT <xsl:value-of> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
ΧSLT
XSLT <xsl:sort> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
ΧSLT
</xsl:stylesheet> XSLT <xsl:if> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:if test="price > 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template>
ΧSLT
The <xsl:choose> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
ΧSLT
The <xsl:apply-templates> Element <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="cd"> <p> <xsl:apply-templates select="title"/> <xsl:apply-templates select="artist"/> </p> </xsl:template> <xsl:template match="title"> Title: <span style="color:#ff0000"> <xsl:value-of select="."/></span> <br /> </xsl:template> <xsl:template match="artist"> Artist: <span style="color:#00ff00"> <xsl:value-of select="."/></span> <br /> </xsl:template> </xsl:stylesheet>
ΧSLT