1 / 69

Programrendszerek fejlesztése

Programrendszerek fejlesztése. Bilicki Vilmos bilickiv @ inf.u-szeged.hu. A mai előadás tartalma:. XPath XSLT. Irodalom. Don Box: Essential XML http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxml/html/desxsdlib.asp http://www.w3.org/TR/xmlschema-2/#built-in-datatypes

chip
Download Presentation

Programrendszerek fejlesztése

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. Programrendszerek fejlesztése Bilicki Vilmos bilickiv@inf.u-szeged.hu

  2. A mai előadás tartalma: • XPath • XSLT

  3. Irodalom • Don Box: Essential XML • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxml/html/desxsdlib.asp • http://www.w3.org/TR/xmlschema-2/#built-in-datatypes • http://www.zvon.org/xxl/XSLTutorial/Books/Book1/

  4. XSD • Típusokat definiálhatunk • Beépített típusokat használhatunk (http://www.w3.org/TR/xmlschema-2/) • Szűkítéses származtatás • Az érték határok mellett a lexikális formátum is definiált (0,1-true,false) -> kompatibilitás

  5. Értékek, Lexikális típusok • Beépített adattípusokat használhatunk

  6. Típusok definiálása névtéren belül • A felhasználók definiálhatnak típusokat(UDT) • Típus definiáláskor hasonlóan az OO nyelvekhez célszerű névtereket használni

  7. Példa <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.org/publishing" xmlns:tns="http://example.org/publishing"> <!-- type definitions --> <xsd:simpleType name="AuthorId"> <!-- define value space details here --> </xsd:simpleType> <xsd:complexType name="AuthorType"> <!-- define structural details here --> </xsd:complexType> <!-- global element/attribute declarations --> <xsd:element name="author" type="tns:AuthorType"/> <xsd:attribute name="authorId" type="tns:AuthorId"/> ... </xsd:schema>

  8. XSD Alapelemek • Egyszerű típus: • xsd:simpleType • csak szöveges elemek értéke és attribútuma lehet • Összetett típus: • xsd:complexType • struktúrát definiál • Elem definiálása: • xsd:element • Attribútum definiálása: • xsd:attribute • Egyszerű típus konstrukció: • xsd:restriction • xsd:union • xsd:list

  9. Használatuk XML-ben <x:author xmlns:x="http://example.org/publishing"> <!-- structure determined by complexType definition --> ... </x:author> Vagy <genericId xmlns:x="http://example.org/publishing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="tns:AuthorId" >333-33-3333</genericId>

  10. Szűkítési minták • xsd:enumeration (lista) • xsd:fractionDigits (a tizedesjegy után) • xsd:length () • xsd:maxExclusive • xsd:maxInclusive • xsd:maxLength • xsd:minExclusive • xsd:minInclusive • xsd:minLength • xsd:pattern • xsd:totalDigits • xsd:whiteSpace

  11. Példa: Egyszerű típusok ... <xsd:simpleType name="RoyaltyRate"> <xsd:restriction base="xsd:double"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="100"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Pubs2003"> <xsd:restriction base="xsd:date"> <xsd:minInclusive value="2003-01-01"/> <xsd:maxInclusive value="2003-12-31"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="rate" type="tns:RoyaltyRate"/> <xsd:element name="publicationDate" type="tns:Pubs2003"/> ...

  12. Példa: Lexikális szűkítés ... <xsd:simpleType name="SSN"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-\d{2}-\d{4}"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="PublisherAssignedId"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{2}-\d{8}"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Phone"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\(\d{3}\)\d{3}-\d{4}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="authorId" type="tns:SSN"/> <xsd:element name="pubsAuId" type="tns:PublisherAssignedId"/> <xsd:element name="phone" type="tns:Phone"/> ...

  13. Példa: felsorolás ... <xsd:simpleType name="PublicationType"> <xsd:restriction base="xsd:NMTOKEN"> <xsd:enumeration value="Book"/> <xsd:enumeration value="Magazine"/> <xsd:enumeration value="Journal"/> <xsd:enumeration value="Online"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="pubType" type="tns:PublicationType"/> ...

  14. Példa: unió ... <xsd:simpleType name="AuthorId"> <xsd:union memberTypes="tns:SSN tns:PublisherAssignedId"/> </xsd:simpleType> <xsd:element name="authorId" type="tns:AuthorId"/> ...

  15. Komplex típusok • xsd:complexType: • xsd:sequence • xsd:choice • xsd:all • ref • névtér definiálás: • ##any • ##other • ##targetNamespace • ##local • Lista

  16. <xsd:complexType name="AddressType"> <xsd:all> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string" minOccurs="0"/> <xsd:element name="state" type="tns:State" minOccurs="0"/> <xsd:element name="zip" type="tns:Zip"/> </xsd:all> </xsd:complexType> <xsd:complexType name="PublicationsListType"> <xsd:choice maxOccurs="unbounded"> <xsd:element name="book" type="xsd:string"/> <xsd:element name="article" type="xsd:string"/> <xsd:element name="whitepaper" type="xsd:string"/> </xsd:choice> </xsd:complexType> <xsd:complexType name="AuthorType"> <xsd:sequence> <xsd:choice> <xsd:element name="name" type="xsd:string"/> <xsd:element name="fullName" type="xsd:string"/> </xsd:choice> <xsd:element name="address" type="tns:AddressType"/> <xsd:element name="phone" type="tns:Phone" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="recentPublications„type="tns:PublicationsListType"/> </xsd:sequence> <xsd:attribute name="id" type="tns:AuthorId"/> </xsd:complexType> <xsd:element name="author" type="tns:AuthorType"/>

  17. XPath • W3C szabvány • Az XML dokumentumot faként kezeli • Gyökér • Elem • Tulajdonság • Szöveg • Megjegyzés • Feldolgozási információ • Névterek • Segítségével csomópontokat, vagy csomópontok csoportjait jelölhetjük ki • Elérési útvonalak csomópontok kijelölésére • XPath operátorok és függvények

  18. XPath XML XML XML Miért használjuk Az XSLT stílus lapokban,minta illesztésre A DOM-ban,csomópontok kiválasztására XPath XPointer-ben, a dokumentumok csatolására SQL Server-nél,XML-t is tud generálni

  19. Root <catalog> "urn:litware" "proc-instr" "comment " <product> "urn:litwareinc" "123" "Blue jeans" XPath fa struktúra • XML dokumentum XPath faként <catalog xmlns="urn:litwareinc"> <?proc instr?> <!--comment--> <product code="123"> Blue jeans </product> </catalog>

  20. A csomópontokból kinyerhető információk • Minden csomópont rendelkezik tulajdonságokkal • Tulajdonságok • Érték • Név • Szülő csomóp. • Gyerek csomóp. • Csomópont típusok • Gyökér • Egyed • Tulajdonság • Szöveg • Névtér • Feld. utasítások • Megjegyzés

  21. Elérési útvonalak • Elérési útvonal egy olyan XPath kifejezés mely XML dokumentumban egy vagy több elemet jelöl ki • Lehet: • Relatív • A jelenlegi csomóponthoz viszonyítva • Abszolút • ”/” karakterrel kezdődik • A gyökérhez viszonyítja

  22. Elérési útvonalak product/price • Útvonalat ábrázol • Relatív útvonal • Abszolút útvonal • Balról jobbra vannak kiértékelve • Útvonal az XML dokumentumban • Minden lépés három részből áll • Példa lépés /catalog/product/price axis::node-test[predicate]… child::product[price > 35.95][3]

  23. Tengelyek <catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> </product> <product code="789"> <price>185.00</price> </product> </catalog> <catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> </product> <product code="789"> <price>185.00</price> </product> </catalog> self following child following-sibling parent preceding attribute preceding-sibling descendant descendant-or-self ancestor ancestor-or-self Root node <catalog> <product> <product> <product> code=123 <price> code=456 <price> <discount> code=789 <price> 35.99 22.95 <amount> 185.00 25

  24. Tengelyek használata • A gyakori XPath tengelyeknek van rövidített alakja is • A többinek nincs • Példa – ancestor::node() Tengely Példa teljes Példa rövidített child child::price price attribute attribute::code @code self self::node() . parent parent::node() .. descendant-or-self /descendant-or-self()/price //price

  25. Csomópont kritériumok Child examples Attribute examples • Név alapján • Egy adott név • Minden csomóp. • Név és névtér • Minden csomóp. a név.térben • Típus alapján • axis::node-type-function() • Például a gyermek tengelyen: price @code * @* aprefix:price @aprefix:code aprefix:* @aprefix:* text() processing-instruction() node() comment()

  26. Predikátumok használata • Egy lépés egy vagy több predikátumot használhat • Csomópont gyűjtemény szűrése • Pozíció • Tartalom • Létezés alapján • Több predikátumot is használhatunk • Balról jobbra vannak kiértékelve axis::node-test[predicate]… product[last()] product[@code="123"] product[@code] product[3][@discount]

  27. Operátorok és függvények használata • Csomópont gyűjtemény kifejezések és függvények • Logikai kifejezések és függvények • Szám kifejezések és függvények • Karakterlánc kifejezések és függvények

  28. Csomópont gyűjtemény • Az elérési útvonalak csomópont gyűjteményt adnak vissza • Csomópont gyűjteményeket (“ | ”) jellel tudunk összefűzni • Gyűjtemény függvények is használhatóak cd | dvd /*/(cd | dvd) (cd | dvd)/@capacity cd[position() = last()] count(cd[@capacity > 5.8])

  29. Logikai kifejezések • Logikai operátorok = != > >= < <= • Logikai függvények • Példa: product[(price > 25 and price < 35) or price > 50] boolean() not() lang() true() false() product[not(@code) and not(discount-policy)]

  30. Szám kifejezések • Egyenlőtlenség • Bináris operátorok, + - * div mod • Függvények • Példa account[balance >= - overdraft-limit] account[(balance mod 100) > 0] number() floor() ceiling() round() sum() account[sum(transaction-amount) > 0]

  31. Karakterláncok • Kerekterlánc szűrő • Karakterlánc módosító string-length(customer/@last-name) customer[ starts-with(@last-name, "Mac") ] customer[ contains(@last-name, "Mac") ] concat(@last-name, "[", @first-name, "]") substring(@middle-name, 1, 1) substring-before("12/3/1964", "/") or substring-after normalize-space(" To be or not to be ") translate(str, "aeiou", "AEIOU")

  32. Tanácsok • Rövidített szintaxist használjuk ha van • Egyszerűbb karbantartani • Kerüljük a túl általános kifejezéseket: // • Ha tudjuk akkor szűkítsük le: /*/product • Ne használjuk a count() –ot arra hogy megnézzük van-e eleme • Használjuk a last()-ot • Ne használjuk a name() a név vizsgálatra • Használjuk a namespace-URI() és local-name() függvényeket helyette

  33. Bevezetés az XSLT-be • Az XSLT alkalmazási területei • Az XSLT mint deklaratív programozási nyelv • XSLT stíluslap struktúra • Minták definiálása • Stíluslapok statikus használata • Stíluslapok dinamikus használata

  34. Az XSLT felhasználási területei • W3C gondozza • XSL-ből származik • Egy XML dokumentum más struktúrájú domukentummá konvertálása • XML HTML-é konvertálása • XML szöveggé konvertálása • Adat szűrése, kinyerése, összefűzése

  35. XSLT képességek • Sok különböző transzformációra képes • Példák: • Egy XML szintaxis másikra cserélése • Adat szűrés • Adat rendezés • XML átstruktúrálás • Számítások elvégzése

  36. XML HTML-é transzformálás • XSLT XML dokumentum HTML dokumentum + XSLT processor XSLT stílus lap <employees> <employee> <name>Reid</name> <salary>91000</salary> </employee> … </employees> <HTML><TABLE> <TR> <TD>Reid</TD> <TD>91000</TD> </TR> … </TABLE></HTML>

  37. XML más XML szintakszissá • Más szintakszis XML dokumentum Más XML nyelvtan + XSLT processor XSLT stílus lap <employees> <employee> <name>Reid</name> <salary>91000</salary> </employee> … </employees> <staff> <staff-member name="Reid" pay="91000"/> … </staff>

  38. XSLT mint deklaratív programozási nyelv • Szabályokon, nem eljárásokon alapul • A stílus lap szabályok bármilyen sorrendben végrehajthatóak • A stílus lap szabályok egymástól függetlenek lehetnek • A stílus lap szabályok független a bevitel, kimenet sorrendtől

  39. 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" />

  40. Sablon szabályok definiálása • A csomópontok kiválasztása a <xsl:template> egyezés tulajdonságával • A gyökér elem sablon szabályának definiálása (megvalósítás függő) • Kimenet produkálása a <xsl:value-of> elemmel <xsl:template match= "/"> <xsl:value-of select="//employee"/> </xsl:template>

  41. Stíluslapok statikus használata • Stíluslap statikus használata egy XML dokumentumban • Használjuk a <?xml-stylesheet …?> elemet az XML dokumentumban • Adjuk meg a stíluslap helyét <?xml-stylesheet type="text/xsl" href="MySheet.xsl"?> <employees> … XML document content … </employees>

  42. Stíluslapok dinamikus használata • XslTransform használata (jelenleg) • XslCommand használata (2005) XslTransform xslttrans = new XslTransform(); xslttrans.Load(@"D:\users\bilickiv\dotnet\7es eloadas\stylesheet0701.xsl"); xslttrans.Transform(@"D:\users\bilickiv\dotnet\7es eloadas\demo0701.xml“ , @"D:\users\bilickiv\dotnet\7es eloadas\demo1eredmeny.txt", null); XsltCommand xslt = new XsltCommand(); xslt.OnMessageEvent += new QueryEventHandler(MessageCallBack); xslt.Compile("output.xsl"); xslt.Execute("books.xml", "books.html");

  43. Sablon szabályok • Sablon szabályok definiálása • Sablon tartalom definiálása • Több sablon szabály használata • Literális eredmény elemek használata

  44. Sablon szabályok definiálása • A <xsl:template> szintakszis a leggyakrabban alkalmazott elem • match vagy name • XSLT Fa Modell • Az XSLT transzformációk sorrendje • <apply-templates> • IE alap stíluslapja: • res://msxml3.dll/defaultss.xsl

  45. A sablon tartalom definiálása • <xsl:value-of> a csomópont szöveges értékét írja ki • <xsl:copy-of> a csomópont XML tartalmát írja ki <xsl:template match="employee"> <xsl:value-of select="name"/> <xsl:copy-of select="emergencycontact"/> </xsl:template> James Wilson <emergencycontact> <name>Kathryn Wilson</name> <relationship>Spouse</relationship> <contactnumber>425123456</contactnumber> </emergencycontact>

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

  47. Szöveges eredmény elemek • HTML, szkript, vagyszövegmásolása a kimeneti fára • XSLT részeket értelmezi az értelmező • A névtér elemek kimásolódnak

  48. Sablon szabály minták • XPath kifejezések használata • A rekurzív művelet használata (//) • Boolean operátorok használata employees/employee/empname //employee/empname employees/employee[type='full' or type='part']

  49. Sablonok illesztése válogatott mintára • <xsl:apply-templates> alapértelmezett működése • A sablonokat a gyermek elemekre illeszti • Csak adott gyermek elemekre illeszteni: • Aselecttulajdonság segítségével <xsl:apply-templates> <xsl:template match="/"> <xsl:apply-templates select=”employee”/> </xsl:apply-templates>

  50. Névterek használata <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:nw="urn:nwtraders" xmlns:con="urn:contoso"> <xsl:template match="nw:employee"> <xsl:value-of select="nw:name"/> </xsl:template> <xsl:template match="con:employee"> <xsl:value-of select="con:surname"/>, <xsl:value-of select="con:given-name"/>, </xsl:template> </xsl:stylesheet>

More Related