440 likes | 547 Views
.NET web szolgáltatások. XSLT programozás XSLT hivatkozások Bilicki Vilmos bilickiv@inf.u-szeged.hu www.inf.u-szeged.hu/~bilickiv. Kötelező feladat. Két fős csoportok NIM játék megvalósítása 1 függvény (WSDL-ben fogom definiálni) Game() Regisztráció az UDDI-ban fellelt Játékmesterben
E N D
.NET web szolgáltatások XSLT programozás XSLT hivatkozások Bilicki Vilmos bilickiv@inf.u-szeged.hu www.inf.u-szeged.hu/~bilickiv
Kötelező feladat • Két fős csoportok • NIM játék megvalósítása • 1 függvény (WSDL-ben fogom definiálni) • Game() • Regisztráció az UDDI-ban fellelt Játékmesterben • Csoport honlap létrehozása • Lehessen • Vezérelni a NIM játékot • Statisztikát nézegetni
Az előző előadás tartalma • Bevezetés az XSLT-be • Bevezetés az XSLT-be • Sablon szabályok • Fejlett sablon szabályok • Stíluslapok kombinálása • A dokumentum tartalom sorbarendezése • A kimenet testreszabása • Stíluslapok beszúrása és importálása
XSLT stíluslap struktúra • Egy <xsl:stylesheet> elem, vagy <xsl:transform> • Felső szintű elemek. Pl.: sablon szabályok • XSLT, Implementáció spec., Felh. Def. • Utasítás elemek <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> </xsl:stylesheet> <xsl:template match="/"> … … … </xsl:template> <xsl:apply-templates select="employees/employee" /> <xsl:template match="employee"> … … … </xsl:template> <xsl:value-of select="name" />
Sablon szabályok definiálása <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="employees"> <H1>Employees details</H1> <xsl:apply-templates/> </xsl:template> <xsl:template match="employee"> <xsl:value-of select="name"/>, <xsl:value-of select="salary"/> </xsl:template> </xsl:stylesheet>
Rendezés • <xsl:sort> a következő tulajdonságokkal rendelkezik: • order – "ascending"vagy"descending" • case-order – "upper-first"vagy"lower-first" • lang – nyelv kód (pl.:"en") • data-type – "text"vagy"number" • Például • Rendezzük az <employee> elemeket <salary> elem alapján csökkenő sorrendben <xsl:apply-templates select="employee"> <xsl:sort select="salary" order="descending" data-type="number"/> </xsl:apply-templates>
Az előadás tartalma • XSLT programozás • Nevesített sablonok • Váltózó, paraméterek • Ciklusok, feltételek • XSLT hivatkozások • Több XML dokumentum használata egy stíluslapban • Kereszthivatkozások • Kereszthivatkozások az eredmény dokumentumban
Források • Microsoft 1913A official curriculum • http://www.gotdotnet.com/ • Eszköz • http://www.xmlcooktop.com/
XSLT programozás • Nevesített minták • Definiálása • Hivatkozás nevesített mintára • Váltózó, paraméterek • Változók deklarálása • Értékadás • Változók használata • Eredmény fa részletek létrehozása és használata • Paraméterek használata • Paraméterek átadása minta szabályoknak • Paraméterek átadása stíluslapoknak • Ciklusok, feltételek • Ciklusok használata • Sorbarendezés • Elágazások
Nevesített minták • Feladatuk: • A kód egyszerűsítés • Kód újrafelhasználás • Egyszerű minta a név attribútum ki van töltve • Függvények procedurális programozási nyelvekben • Tartalmazhat egyezés elemet is (match) <xsl:template name="concatnames"> <xsl:value-of select="firstname"/> <xsl:value-of select="lastname"/> </xsl:template>
Nevesített minta meghívása • Meghívható: <xsl:call-template> • Az aktuális csomópont és csomópont lista változatlan (<xsl:apply-template> esetén) • Ha nem találja akkor hiba jelzéssel tér vissza <xsl:template match="employee"> <xsl:call-template name="concatnames"/><br/> </xsl:template>
Változó és paraméterek • Változók deklarálása • Értékadás • Változók használata • Eredmény fa részletek létrehozása és használata • Paraméterek használata • Paraméterek átadása minta szabályoknak • Paraméterek átadása stíluslapoknak • DEMÓ
Változók deklarálása • Adattárolásra használandók • Ha egyszer ki lett értékelve nem lehet megváltoztatni (ezzel biztosítjuk azt, hogy a szabályok sorrendje tetszőleges, nem hatnak egymásra, a végeredmény azonos) • A hatókör a definiálás helyétől függ • A mintában definiáltak lokálisak • A legfelsőbb szinten deklaráltak globálisak • Típusai: • karakterlánc • szám • logikai • csomópont gyűjtemény
Érték adás • A select attribútummal • Egy idézőjel a Washington elem értékét jelentené • A sablon tartalmával <xsl:variable name="state" select="'Washington'"/> <xsl:variable name="state">Washington</xsl:variable>
Változók használata <xsl:variable name="country" select="' US '"/> <xsl:variable name="currency" select="' dollars'"/> <xsl:template match="employee"> <xsl:variable name="job" select="concat(jobtitle, 's Department')"/> <xsl:value-of select="name"/> works in the <xsl:value-of select="$job"/> and earns <xsl:value-of select="salary"/> <xsl:value-of select="$country"/> <xsl:value-of select="$currency"/><br/> </xsl:template>
Eredmény Fa rész használata <xsl:variable name="pagefooter"> <table><tr> <td>Date</td> <td><xsl:value-of select="$deptname"></td> <td>Time</td> </tr></table> </xsl:variable> <xsl:template match="/"> <HTML><BODY> <!--Various outputs--> <xsl:copy-of select="$pagefooter"> </BODY></HTML> </xsl:template>
Változók használata • A hívó adja meg az értékét • Alapértelmezett érték beállítható • Lokális paraméterek • Sablon szabályban • Global Parameters • Stílus lapban
Sablon paraméterek átadása <xsl:template match="employee"> <xsl:call-template name="contact-details"> <xsl:with-param name="emp" select="name"/> </xsl:call-template> </xsl:template> <xsl:template name="contact-details"> <xsl:param name="emp"/> <xsl:value-of select="$emp"/>'s contact is <xsl:value-of select="next_of_kin/name"/><br/> </xsl:template>
Stíluslap paraméter átadása XslTransform xslt = new XslTransform(); xslt.Load(stylesheet); XsltArgumentList xslArg = new XsltArgumentList(); DateTime d = DateTime.Now; xslArg.AddParam("date", "", d.ToString()); XmlTextWriter writer = new XmlTextWriter(Console.Out); xslt.Transform(new XPathDocument(filename), xslArg, writer, null); writer.Close();
Ciklusok, elágazások • Ciklusok használata • Sorbarendezés • Elágazások
Ciklus • Csomópontok halmazán mehetünk végig • A <xsl:for-each> utasítás • <xsl:apply-template> is ugyanezt csinálja • Biztonságosabb, nem függ a szerkezeti változásoktól • A ciklus gyorsabb és átláthatóbb • Aktuális csomópont pozíciója: position() <xsl:template match="employees"> <xsl:for-each select="employee"> <xsl:value-of select="name"/><br/> </xsl:for-each> </xsl:template>
Sorrend megadása • Az <xsl:sort> utasítás a <xsl:for-each> utasításon belül • Ugyanaz mint az <xsl:apply-template><xsl-sort> eleme <xsl:template match="employees"> <xsl:for-each select="employee"> <xsl:sort select="region" order="descending"/> <xsl:sort select="name"/> <xsl:value-of select="name"/><br/><br/> </xsl:for-each> </xsl:template>
Elágazások <xsl:template match="employee"> <xsl:if test="salary>50000"> High Tax -- </xsl:if> <xsl:value-of select="name"/><br/> </xsl:template> <xsl:template match="employee"> <xsl:choose> <xsl:when test="salary>50000">High -- </xsl:when> <xsl:when test="salary>25000">Avg --</xsl:when> <xsl:otherwise>Low --</xsl:otherwise> </xsl:choose> <xsl:value-of select="name"/><br/> </xsl:template>
Tippek • Használjunk nevesített sablonokat • Használjuk a <xsl:apply-templates> a gyakran változó dokumentumokhoz • Használjuk az <xsl:for-each> -et a statikus dokumentumokhoz • Használjuk az <xsl:choose> -t több feltétel tesztelésére
Hivatkozás XML dokumentumokra • Több XML dokumentum használata egy stíluslapban • Kereszthivatkozások • Kereszthivatkozások az eredmény dokumentumban
Hivatkozott dokumentumok használata AddressbyRegion.xsl Regions.xml <xsl:template match="employee"> <xsl:value-of select="surname"/> <br/> <xsl:value-of select="document('Regions.xml') //region[@code=current()/rgn]/@place"/> <br/><br/> </xsl:template> Employees.xml <employee> <surname>Philips</surname> <rgn>R</rgn> </employee> <region code="R" place="Redmond"/> <region code="D" place="Dallas"/>
Hivatkozott dokumentumok <regions> <region place="Dallas" href="dallasemp.xml" /> <region place="Redmond" href="redmondemp.xml" /> </regions> Regions.xml <xsl:for-each select="region"> <xsl:value-of select="@place"/> <br/> <xsl:for-each select="document(@href)//employee"> <xsl:value-of select="surname"/> <br/> </xsl:for-each> <br/> </xsl:for-each> RegionLookup.xsl
Alap URI megadása • Alapértelmezésként az URI-k a stíluslaphoz vannak viszonyítva • A document() függvény második paraméterében megadható egyébb alap URI <regions> <region place="Dallas" href="dallasemp.xml" /> <region place="Redmond" href="redmondemp.xml" /> </regions> Regions.xml <xsl:for-each select = "document(@href, 'www.litware.com/data')//employee"> <xsl:value-of select="surname"/> <br/> </xsl:for-each> RegionLookup.xsl
Kereszthivatkozások • Az összefüggő információk egy dokumentumba sűrítése • Implicit kereszthivatkozás • Explicit kereszthivatkozás • XSLT kulcs definiálása • Csomópontok címzése XSLT kulcsokkal • 4. Demó • Kulcsok kiolvasása más dokumentumokból
Az összefüggő információk egy dokumentumba sűrítése <orders> <order id="10285" customer-code="191"> <product code="654"/> </order>… <customers> <customer code="191"> <name>Carol Philips</name> <address>432, 23rd Way, Redmond</address> </customers>… <products> <product code="654"> <description>Wool sweater</description> <price>27.99</price> </product> </products>… </orders>
Implicit kereszthivatkozások • XPath segítségével hivatkozunk a kapcsolódó információra • Problémás: • Nehéz olvasni, kódolni • Nehéz karbatartani <xsl:apply-templates select=”/orders/customres/customer[@code=current()/@customer-code]”/>
Explicit Kereszthivatkozások • Az adatok szabványos attribútumokon keresztül csatlakoznak • ID, IDREF, vagy IDREFS XML Sémában • Adatok címzése • Használjuk az XSLT id(objektum) függvényt • Problémák • A sémát meg kell osztani • Attribútumokat használunk hivatkozásra nem elemeket
XSLT Kulcs definiálása • Az adatokat XSLT kulcsokkal is összekapcsolhatjuk • Kulcs bármilyen tartalomból készíthető • Nem kell séma • Index készíthető • XSLT kulcsok definiálása <xsl:key name="custcode" match="customer" use="zip"/> <xsl:key name="prodcode" match="product" use="@code"/>
Csomópontok címzése XSLT kulcsokkal • Karakterlánc argumentummal • Csomópont gyűjteménnyel <xsl:key name="custcode" match="customer" use="@code"/> <xsl:template match="order"> <xsl:apply-templates select="key('custcode',customer/@code)"/> </xsl:template> <xsl:key name="prodcode" match="product" use="@code"/> <xsl:template match="order"> <xsl:apply-templates select="key('prodcode',item/code)"/> </xsl:template>
Egyedi azonosítók gyártása <xsl:for-each select="//product"> <tr> <td><a href="#{generate-id(description)}"> <xsl:value-of select="description"/></a></td> <td><xsl:value-of select="department"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:for-each> <xsl:for-each select="//product/description"> <b><a name="{generate-id()}"> <xsl:value-of select="../description"/></a></b></br> <xsl:value-of select="../details"/><br/> </xsl:for-each>
Tippek • Definiáljuk az alap URI-t a document() függvényhez • Használjunk kulcsokat
Az előadás tartalma • Bevezetés az XSLT-be • Bevezetés az XSLT-be • Sablon szabályok • Fejlett sablon szabályok • Stíluslapok kombinálása • A dokumentum tartalom sorbarendezése • A kimenet testreszabása • Stíluslapok beszúrása és importálása
A következő előadás tartalma • Web szolgáltatások • WSDL • WS-profilok