NET web szolgltatsok XSLT programozs XSLT hivatkozsok Bilicki
. NET web szolgáltatások XSLT programozás XSLT hivatkozások Bilicki Vilmos bilickiv@inf. u-szeged. hu www. inf. u-szeged. hu/~bilickiv 1
Kötelező feladat ¢ Két fős csoportok l 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 l Csoport honlap létrehozása • Lehessen • Vezérelni a NIM játékot • Statisztikát nézegetni 2
Az előző előadás tartalma ¢ Bevezetés az XSLT-be l Sablon szabályok l Fejlett sablon szabályok l ¢ Stíluslapok kombinálása A dokumentum tartalom sorbarendezése l A kimenet testreszabása l Stíluslapok beszúrása és importálása l 3
XSLT stíluslap struktúra ¢ Egy <xsl: stylesheet> elem, vagy <xsl: transform> n Felső szintű elemek. Pl. : sablon szabályok XSLT, Implementáció spec. , Felh. Def. Utasítás elemek n n <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <xsl: apply-templates select="employees/employee" /> … … … </xsl: template> <xsl: template match="employee"> … … … <xsl: value-of select="name" /> </xsl: template> 4 </xsl: stylesheet>
Sablon szabályok definiálása <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <HTML> <xsl: apply-templates/> </HTML> </xsl: template> <xsl: template match="employees"> <H 1>Employees details</H 1> <xsl: apply-templates/> </xsl: template> <xsl: template match="employee"> <xsl: value-of select="name"/>, <xsl: value-of select="salary"/> </xsl: template> </xsl: stylesheet> 5
Rendezés ¢ ¢ <xsl: sort> a következő tulajdonságokkal rendelkezik: l order – "ascending" vagy "descending" l case-order – "upper-first" vagy "lower-first" l lang – nyelv kód (pl. : "en") l data-type – "text" vagy "number" Például l 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> 6
Az előadás tartalma ¢ XSLT programozás Nevesített sablonok l Váltózó, paraméterek l Ciklusok, feltételek l ¢ XSLT hivatkozások Több XML dokumentum használata egy stíluslapban l Kereszthivatkozások az eredmény dokumentumban l 7
Források ¢ Microsoft 1913 A official curriculum http: //www. gotdotnet. com/ ¢ Eszköz ¢ l 8 http: //www. xmlcooktop. com/
XSLT programozás ¢ ¢ ¢ 9 Nevesített minták l Definiálása l Hivatkozás nevesített mintára Váltózó, paraméterek l Változók deklarálása l Értékadás l Változók használata l Eredmény fa részletek létrehozása és használata l Paraméterek átadása minta szabályoknak l Paraméterek átadása stíluslapoknak Ciklusok, feltételek l Ciklusok használata l Sorbarendezés l Elágazások
Nevesített minták ¢ Feladatuk: A kód egyszerűsítés l Kód újrafelhasználás l 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> 10
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> 11
1. DEMÓ 12
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 átadása minta szabályoknak ¢ Paraméterek átadása stíluslapoknak ¢ DEMÓ ¢ 13
Változók deklarálása ¢ Adattárolásra használandók l ¢ A hatókör a definiálás helyétől függ l l ¢ 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 mintában definiáltak lokálisak A legfelsőbb szinten deklaráltak globálisak Típusai: l l 14 karakterlánc szám logikai csomópont gyűjtemény
Érték adás ¢ A select attribútummal <xsl: variable name="state" select="'Washington'"/> l ¢ Egy idézőjel a Washington elem értékét jelentené A sablon tartalmával <xsl: variable name="state">Washington</xsl: variable> 15
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> 16
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> 17
Változók használata ¢ A hívó adja meg az értékét l ¢ Lokális paraméterek l ¢ Alapértelmezett érték beállítható Sablon szabályban Global Parameters l 18 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> 19
Stíluslap paraméter átadása Xsl. Transform xslt = new Xsl. Transform(); xslt. Load(stylesheet); Xslt. Argument. List xsl. Arg = new Xslt. Argument. List(); Date. Time d = Date. Time. Now; xsl. Arg. Add. Param("date", "", d. To. String()); Xml. Text. Writer writer = new Xml. Text. Writer(Console. Out); xslt. Transform(new XPath. Document(filename), xsl. Arg, writer, null); writer. Close(); 20
1. 5. DEMÓ 21
Ciklusok, elágazások Ciklusok használata ¢ Sorbarendezés ¢ Elágazások ¢ 22
Ciklus ¢ ¢ Csomópontok halmazán mehetünk végig A <xsl: for-each> utasítás <xsl: template match="employees"> <xsl: for-each select="employee"> <xsl: value-of select="name"/><br/> </xsl: for-each> </xsl: template> ¢ <xsl: apply-template> is ugyanezt csinálja l l ¢ 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() 23
Sorrend megadása Az <xsl: sort> utasítás a <xsl: for-each> utasításon belül ¢ Ugyanaz mint az <xsl: apply-template><xslsort> 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/> </xsl: for-each> </xsl: template> 24
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> 25
2. DEMÓ 26
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 ¢ 27
Hivatkozás XML dokumentumokra Több XML dokumentum használata egy stíluslapban ¢ Kereszthivatkozások az eredmény dokumentumban ¢ 28
Hivatkozott dokumentumok használata Addressby. Region. xsl <xsl: template match="employee"> <xsl: value-of select="surname"/> <br/> <xsl: value-of select="document('Regions. xml') //region[@code=current()/rgn]/@place"/> <br/> </xsl: template> Employees. xml <employee> <surname>Philips</surname> <rgn>R</rgn> </employee> <region code="R" place="Redmond"/> <region code="D" place="Dallas"/> Regions. xml 29
Hivatkozott dokumentumok Regions. xml <regions> <region place="Dallas" href="dallasemp. xml" /> <region place="Redmond" href="redmondemp. xml" /> </regions> <xsl: for-each select="region"> Region. Lookup. xsl <xsl: value-of select="@place"/> <br/> <xsl: for-each select="document(@href)//employee"> <xsl: value-of select="surname"/> <br/> </xsl: for-each> 30
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> Regions. xml <region place="Dallas" href="dallasemp. xml" /> <region place="Redmond" href="redmondemp. xml" /> </regions> <xsl: for-each select = Region. Lookup. xsl "document(@href, 'www. litware. com/data')//employee"> <xsl: value-of select="surname"/> <br/> </xsl: for-each> 31
3. DEMÓ 32
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 ¢ 33
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, 23 rd Way, Redmond</address> </customers>… <products> <product code="654"> <description>Wool sweater</description> <price>27. 99</price> </products>… </orders> 34
Implicit kereszthivatkozások XPath segítségével hivatkozunk a kapcsolódó információra ¢ Problémás: ¢ Nehéz olvasni, kódolni l Nehéz karbatartani l <xsl: apply-templates select=”/orders/customres/customer[@code=cu rrent()/@customer-code]”/> 35
Explicit Kereszthivatkozások ¢ Az adatok szabványos attribútumokon keresztül csatlakoznak l ¢ Adatok címzése l ¢ ID, IDREF, vagy IDREFS XML Sémában Használjuk az XSLT id(objektum) függvényt Problémák A sémát meg kell osztani l Attribútumokat használunk hivatkozásra nem elemeket l 36
XSLT Kulcs definiálása ¢ Az adatokat XSLT kulcsokkal is összekapcsolhatjuk Kulcs bármilyen tartalomból készíthető l Nem kell séma l Index készíthető l ¢ XSLT kulcsok definiálása <xsl: key name="custcode" match="customer" use="zip"/> <xsl: key name="prodcode" match="product" use="@code"/> 37
Csomópontok címzése XSLT kulcsokkal ¢ Karakterlánc argumentummal <xsl: key name="custcode" match="customer" use="@code"/> <xsl: template match="order"> <xsl: apply-templates select="key('custcode', customer/@code)"/> </xsl: template> ¢ Csomópont gyűjteménnyel <xsl: key name="prodcode" match="product" use="@code"/> <xsl: template match="order"> <xsl: apply-templates select="key('prodcode', item/code)"/> </xsl: template> 38
4. DEMÓ 39
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></br> <xsl: value-of select=". . /details"/><br/> </xsl: for-each> 40
5. DEMÓ 41
Tippek Definiáljuk az alap URI-t a document() függvényhez ¢ Használjunk kulcsokat ¢ 42
Az előadás tartalma ¢ Bevezetés az XSLT-be l Sablon szabályok l Fejlett sablon szabályok l ¢ Stíluslapok kombinálása A dokumentum tartalom sorbarendezése l A kimenet testreszabása l Stíluslapok beszúrása és importálása l 43
A következő előadás tartalma ¢ Web szolgáltatások WSDL l WS-profilok l 44
- Slides: 44