1 Fejlett Programozási Technikák 2. 15/2
Fejlett Programozási Technológiák 2. 2 A mai előadás tartalma: DTD XSD XPath XSLT
Fejlett Programozási Technológiák 2. 3 Irodalom Don Box: Essential XML us/dnxml/html/desxsdlib.asp us/dnxml/html/desxsdlib.asp
Fejlett Programozási Technológiák 2. 4 Aktuális a téma? Microsoft: Az XML alapú technológiák adnak lehetőséget a komponensek együttműködésére. Oracle: Az OTN magazin több mint 1/3-ad része webes technológiákkal foglalkozik. Integráció
Fejlett Programozási Technológiák 2. 5 DTD Öndokumentálás Nyelvtan Elemkészlet Hibadetektálás (B2B)
Fejlett Programozási Technológiák 2. 6 Példa <!ELEMENT Pelda1:Feladat (Pelda1:vegrehajto, Pelda1:megbizo, Pelda1:hatarido)>
Fejlett Programozási Technológiák 2. 7 Ismétlődés operátorok Nincs Pontosan egyszer kell szerepelnie ? Egyszer vagy egyszer sem + Legalább egyszer * Akárhányszor (0 is) <!ELEMENT Pelda1:Feladat ((Pelda1:vegrehajto, Pelda1:hatarido))+, Pelda1:megbizo)>
Fejlett Programozási Technológiák 2. 8 Tulajdonságok Módosító: #IMPLIED -- Nem feltétlenül szükséges. #REQUIRED -- Szükséges. #FIXED-- Kötelező a jelenléte és az értéke egyaránt. ”alapértelmezett érték”
Fejlett Programozási Technológiák 2. 9 XML Schema Definition Language XML elemkészletet és nyelvtant definiál XML szintaxist használ (SAX,DOM) A legtöbb programnyelvben használt adattípusokat használhatjuk A névterek használata lehetővé teszi több séma egybeolvasztását
Fejlett Programozási Technológiák XSD Típusokat definiálhatunk Beépített típusokat használhatunk ( 2/) 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
Fejlett Programozási Technológiák Értékek, Lexikális típusok Beépített adattípusokat használhatunk
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Példa <xsd:schema xmlns:xsd=" targetNamespace=" xmlns:tns="
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Használatuk XML-ben... Vagy <genericId xmlns:x=" xmlns:xsi=" xsi:type="tns:AuthorId" >
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Példa: Egyszerű típusok......
Fejlett Programozási Technológiák Példa: Lexikális szűkítés......
Fejlett Programozási Technológiák Példa: felsorolás......
Fejlett Programozási Technológiák Példa: unió......
Fejlett Programozási Technológiák Komplex típusok xsd:complexType: xsd:sequence xsd:choice xsd:all ref névtér definiálás: ##any ##other ##targetNamespace ##local Lista
Fejlett Programozási Technológiák 2. 22
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Miért használjuk Az XSLT stílus lapokban, minta illesztésre SQL Server-nél, XML-t is tud generálni XPointer-ben, a dokumentumok csatolására A DOM-ban,csomópontok kiválasztására XML XPath
Fejlett Programozási Technológiák Csomópont információk XPath fa struktúra és csomópont típusok A csomópontokbó kinyerhető információk DOM használata
Fejlett Programozási Technológiák XPath fa struktúra XML dokumentum XPath faként <catalog xmlns="urn:litwareinc"> Blue jeans <catalog xmlns="urn:litwareinc"> Blue jeans "123" "Blue jeans" Root "urn:litware" "comment " "proc-instr" "urn:litwareinc"
Fejlett Programozási Technológiák A csomópontokból kinyerhető információk 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 Minden csomópont rendelkezik tulajdonságokkal
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Elérési útvonalak Ú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 product/price /catalog/product/price axis::node-test[predicate]… child::product[price > 35.95][3]
Fejlett Programozási Technológiák Tengelyek self child descendant parent attribute descendant-or-self ancestor ancestor-or-self following following-sibling preceding-sibling preceding code=123 Root node code= code=
Fejlett Programozási Technológiák Tengelyek használata A gyakori XPath tengelyeknek van rövidített alakja is A többinek nincs Példa – ancestor::node() Tengely child attribute self parent Példa teljes child::price attribute::code self::node() parent::node() Példa rövidített descendant-or-self//price/descendant-or-self()/price
Fejlett Programozási Technológiák Csomópont kritériumok 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: text() processing-instruction() comment() node() price * * aprefix:* aprefix:price Attribute examples
Fejlett Programozási Technológiák 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ó Partalom 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()]
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák 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 | /*/(cd | dvd) cd[position() = last()] > 5.8])
Fejlett Programozási Technológiák Logikai kifejezések Logikai operátorok = != > >= < <= Logikai függvények Példa: product[(price > 25 and price 50] true() false() boolean() not() lang() and not(discount-policy)]
Fejlett Programozási Technológiák Szám kifejezések Egyenlőtlenség Bináris operátorok, + - * div mod Függvények Példa account[balance >= - overdraft-limit] number() floor() ceiling() round() sum() account[sum(transaction-amount) > 0] account[(balance mod 100) > 0]
Fejlett Programozási Technológiák Karakterláncok Kerekterlánc szűrő Karakterlánc módosító customer[ "Mac") ] customer[ "Mac") ] 1, 1) "]") normalize-space(" To be or not to be ") substring-before("12/3/1964", "/") or substring-after translate(str, "aeiou", "AEIOU")
Fejlett Programozási Technológiák Tanácsok Rövidített szintakszist 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
Fejlett Programozási Technológiák 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 Demó
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák XSLT XML HTML-é transzformálás XML dokumentum XSLT stílus lap + XSLT processor HTML dokumentum Reid … Reid … Reid … Reid …
Fejlett Programozási Technológiák XML más XML szintakszissá Más szintakszis XML dokumentum XSLT stílus lap + XSLT processor Más XML nyelvtan Reid … Reid … <staff-member name="Reid" pay="91000"/> … <staff-member name="Reid" pay="91000"/> …
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák XSLT stíluslap struktúra Egy elem, vagy Felső szintű elemek. Pl.: sablon szabályok XSLT, Implementáció spec., Felh. Def. Utasítás elemek <xsl:template match="/"> … … … </xsl:template> <xsl:apply-templates select="employees/employee" /> <xsl:template match="employee"> … … … </xsl:template> <xsl:value-of select="name" />
Fejlett Programozási Technológiák Sablon szabályok definiálása A csomópontok kiválasztása a 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 elemmel
Fejlett Programozási Technológiák Stíluslapok statikus használata Stíluslap statikus használata egy XML dokumentumban Használjuk a elemet az XML dokumentumban Adjuk meg a stíluslap helyét … XML document content … … XML document content …
Fejlett Programozási Technológiák Stíluslapok dinamikus használata XslTransform használata (jelenleg) XslCommand használata (2005) XslTransform xslttrans = new XslTransform(); eloadas\stylesheet0701.xsl"); eloadas\demo1eredmeny.txt", null); XslTransform xslttrans = new XslTransform(); eloadas\stylesheet0701.xsl"); eloadas\demo1eredmeny.txt", null); XsltCommand xslt = new XsltCommand(); xslt.OnMessageEvent += new QueryEventHandler(MessageCallBack); xslt.Compile("output.xsl"); xslt.Execute("books.xml", "books.html"); XsltCommand xslt = new XsltCommand(); xslt.OnMessageEvent += new QueryEventHandler(MessageCallBack); xslt.Compile("output.xsl"); xslt.Execute("books.xml", "books.html");
Fejlett Programozási Technológiák 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
Fejlett Programozási Technológiák Sablon szabályok definiálása A szintakszis a leggyakrabban alkalmazott elem match vagy name XSLT Fa Modell Az XSLT transzformációk sorrendje IE alap stíluslapja: res://msxml3.dll/defaultss.xsl
Fejlett Programozási Technológiák A sablon tartalom definiálása a csomópont szöveges értékét írja ki a csomópont XML tartalmát írja ki James Wilson Kathryn Wilson Spouse James Wilson Kathryn Wilson Spouse
Fejlett Programozási Technológiák Sablon szabályok definiálása <xsl:stylesheet version="1.0" xmlns:xsl=" Employees details, <xsl:stylesheet version="1.0" xmlns:xsl=" Employees details,
Fejlett Programozási Technológiák Szöveges eredmény elemek HTML, szkript, vagy szöveg másolása a kimeneti fára XSLT részeket értelmezi az értelmező A névtér elemek kimásolódnak
Fejlett Programozási Technológiák 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']
Fejlett Programozási Technológiák Sablonok illesztése válogatott mintára alapértelmezett működése A sablonokat a gyermek elemekre illeszti Csak adott gyermek elemekre illeszteni: A select tulajdonság segítségével
Fejlett Programozási Technológiák Névterek használata <xsl:stylesheet version="1.0" xmlns:xsl=" xmlns:nw="urn:nwtraders" xmlns:con="urn:contoso" >, <xsl:stylesheet version="1.0" xmlns:xsl=" xmlns:nw="urn:nwtraders" xmlns:con="urn:contoso" >,
Fejlett Programozási Technológiák Ajánlott megoldások Használjunk explicit névtereket Ez lehetővé teszi az elem nevek szabad használatát Definiáljunk szabályokat a gyökér elemre Ekkor biztosak lehetünk a kódunk működésében
Fejlett Programozási Technológiák Csomópontok sorbarendezése Az XSLT segítségével sorbarendezhetjük a csomópontokat Használjuk a a elemben Példa Minden elemre séma illesztés A elemek rendezése érték alapján
Fejlett Programozási Technológiák Több rendező kulcs definiálása Több kulcsot is definiálhatunk Több elem segítségével Példa Rendezzük az elemeket szerint Majd az elemek azonos elemben név szerint vannak rendezve
Fejlett Programozási Technológiák Rendezés finomítása 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 elemeket elem alapján csökkenő sorrendben <xsl:sort select="salary" order="descending" data-type="number"/> <xsl:sort select="salary" order="descending" data-type="number"/>
Fejlett Programozási Technológiák A kimenet testreszabása Számok formázása A szám formátumok lokalizálása A szóközök kezelése Az eredmény dokumentum definiálása XML kimenet definiálása HTML és szöveg kimenet definiálása
Fejlett Programozási Technológiák format-number( , '#000') Használjuk a,-t mint csoportosító és a.-t mint decimális eválasztót Számok formázása A format-number() segítségével format-number( , '#,000.00') , format-number(number, format-string) Gyakori megoldások 0 a szükséges és # az opcionális számra format-number() használata
Fejlett Programozási Technológiák Használjuk a -ot a lokalizált szám formátum definiálására Lokális szabályok format-number()-ben <xsl:decimal-format name="Euro" grouping-separator="." decimal-separator=","/> <xsl:decimal-format name="Euro" grouping-separator="." decimal-separator=","/> format-number(1234.5, '#,000.00', 'Euro') 1.234,50 Példa
Fejlett Programozási Technológiák A B C Hello World a white space node a text node another text node Hello World Hello World Példák Szóköz eltávolítása minden elemből Szóköz megtartása megadott csomópontoknál Szóköz eltváloítása megadott csomópontokból Szóköz eltávolítása Szóköz megtartása Szóköz kezelése
Fejlett Programozási Technológiák Kimeneti formátum Az XSLT stílus lapok két fázisban dolgozódnak fel: Egy eredmény fa generálódik Az eredmény fa a kimeneti dokumentumba íródik A segítségével megadhatjuk a kimenet típusát XML kimenet HTML kimenet Szöveg kimenet
Fejlett Programozási Technológiák XML kimenet Az XSLT két XML kimenet típust tud generálni Jól formázott XML dokumentumokat Külső álltalános egyedek Az elemben adhatjuk meg <xsl:output method="xml" encoding="iso " indent="yes" cdata-section-elements="company script" doctype-system="employees.dtd"/> <xsl:output method="xml" encoding="iso " indent="yes" cdata-section-elements="company script" doctype-system="employees.dtd"/>
Fejlett Programozási Technológiák A segítségével lehet a HTML kimenetet testreszabni HTML, Szöveg kimenet A segítségével lehet a szöveget testreszabni <xsl:output method="html" encoding="iso " indent="yes"/> <xsl:output method="html" encoding="iso " indent="yes"/> <xsl:output method="text" encoding="us-ascii"/> <xsl:output method="text" encoding="us-ascii"/>
Fejlett Programozási Technológiák … … … … Starter.xsl Stíluslapok beszúrása Egy stíluslap felhasználhat másik stíluslapokat Ugyanúgy kell használnunk őket … Példa
Fejlett Programozási Technológiák Stíluslapok importálása Egy stíluslap felhasználhat másik stíluslapokat Az importált stíluslapok felülírhatóak … … Starter.xsl … Példa
Fejlett Programozási Technológiák Felülírt szabályok Felülírás engedélyezése … … Starter.xsl Példa:
Fejlett Programozási Technológiák Több stíluslapot tudunk beilleszteni és importálni Import precedence rules apply Import sorrend New.xsl import A.xsl include C.xsl include E.xsl … import A.xsl include C.xsl include E.xsl … A.xsl C.xsl import D.xsl D.xsl … … E.xsl import F.xsl F.xsl … … import B.xsl B.xsl … …
Fejlett Programozási Technológiák Tippek Definiáljunk konzisztens numerikus formátumot Ne használjuk az elemet amíg nem szükséges Az XSLT gyakran kitalálja a követelményeket Definiáljunk könyvtárakat az atomi műveleteknek Újrahasznosítás:, testreszabás: Konzisztencia, skálázhatóság Fejlesztési, karbantartási idő csökken
Fejlett Programozási Technológiák A következő előadás tartalma Menedzselt kód