Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Fejlett Programozási Technikák 2.

Hasonló előadás


Az előadások a következő témára: "Fejlett Programozási Technikák 2."— Előadás másolata:

1 Fejlett Programozási Technikák 2.
15/2

2 A mai előadás tartalma:
DTD XSD XPath XSLT

3 Irodalom Don Box: Essential XML

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ó

5 DTD Öndokumentálás Nyelvtan Elemkészlet Hibadetektálás (B2B)

6 Példa <!ELEMENT Pelda1:Feladat (Pelda1:vegrehajto, Pelda1:megbizo,
Pelda1:hatarido)> <!ELEMENT Pelda1:vegrehajto (#PCDATA)> <!ELEMENT Pelda1:megbizo (#PCDATA)> <!ELEMENT Pelda1:hatarido (#PCDATA)>

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)>

8 Tulajdonságok <!ATTLIST feladat munkahely (irinyi|arpadter)>
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”

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

10 XSD Típusokat definiálhatunk
Beépített típusokat használhatunk ( 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

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

12 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

13 Példa <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace=" xmlns:tns=" <!-- 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>

14 XSD Alapelemek Egyszerű típus: Összetett típus: Elem definiálása:
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

15 Használatuk XML-ben <x:author xmlns:x=" <!-- structure determined by complexType definition --> ... </x:author> Vagy <genericId xmlns:x=" xmlns:xsi=" xsi:type="tns:AuthorId" > </genericId>

16 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

17 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=" "/> <xsd:maxInclusive value=" "/> <xsd:element name="rate" type="tns:RoyaltyRate"/> <xsd:element name="publicationDate" type="tns:Pubs2003"/>

18 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:pattern value="\d{2}-\d{8}"/> <xsd:simpleType name="Phone"> <xsd:pattern value="\(\d{3}\)\d{3}-\d{4}"/> <xsd:element name="authorId" type="tns:SSN"/> <xsd:element name="pubsAuId" type="tns:PublisherAssignedId"/> <xsd:element name="phone" type="tns:Phone"/>

19 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"/>

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

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

22 <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 name="AuthorType"> <xsd:sequence> <xsd:choice> <xsd:element name="name" type="xsd:string"/> <xsd:element name="fullName" type="xsd:string"/> <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:element name="author" type="tns:AuthorType"/>

23 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

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

25 Csomópont információk
XPath fa struktúra és csomópont típusok A csomópontokbó kinyerhető információk DOM használata

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

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

28 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

29 Elérési útvonalak Útvonalat ábrázol Balról jobbra vannak kiértékelve
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]

30 Tengelyek self following child following-sibling parent preceding
<catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> <product code="789"> <price>185.00</price> </catalog> <catalog> <product code="123"> <price>35.99</price> </product> <product code="456"> <price>22.95</price> <discount> <amount>25</amount> </discount> <product code="789"> <price>185.00</price> </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

31 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

32 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()

33 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()]

34 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

35 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 | cd[position() = last()] > 5.8])

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

37 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]

38 Karakterláncok Kerekterlánc szűrő Karakterlánc módosító
customer[ "Mac") ] customer[ "Mac") ] "]") 1, 1) substring-before("12/3/1964", "/") or substring-after normalize-space(" To be or not to be ") translate(str, "aeiou", "AEIOU")

39 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

40 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ó

41 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

42 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

43 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>

44 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>

45 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

46 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=" </xsl:stylesheet> <xsl:template match="/"> … … … </xsl:template> <xsl:apply-templates select="employees/employee" /> <xsl:template match="employee"> … … … </xsl:template> <xsl:value-of select="name" />

47 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>

48 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>

49 Stíluslapok dinamikus használata
XslTransform használata (jelenleg) XslCommand használata (2005) XslTransform xslttrans = new XslTransform(); eloadas\stylesheet0701.xsl"); eloadas\demo0701.xml“ eloadas\demo1eredmeny.txt", null); XsltCommand xslt = new XsltCommand(); xslt.OnMessageEvent += new QueryEventHandler(MessageCallBack); xslt.Compile("output.xsl"); xslt.Execute("books.xml", "books.html");

50 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

51 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

52 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> </contactnumber> </emergencycontact>

53 Sablon szabályok definiálása
<xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <HTML> <xsl:apply-templates/> </HTML> </xsl:template> <xsl:template match="employees"> <H1>Employees details</H1> <xsl:apply-templates/> <xsl:template match="employee"> <xsl:value-of select="name"/>, <xsl:value-of select="salary"/> </xsl:stylesheet>

54 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

55 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']

56 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: A select tulajdonság segítségével <xsl:apply-templates> <xsl:template match="/"> <xsl:apply-templates select=”employee”/> </xsl:apply-templates>

57 Névterek használata <xsl:stylesheet version="1.0"
xmlns:xsl=" 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:stylesheet>

58 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

59 Csomópontok sorbarendezése
Az XSLT segítségével sorbarendezhetjük a csomópontokat Használjuk a <xsl:sort> a <xsl:apply-templates> elemben Példa Minden <employee> elemre séma illesztés A <employee> elemek rendezése <name> érték alapján <xsl:apply-templates select="employee"> <xsl:sort select="name"/> </xsl:apply-templates>

60 Több rendező kulcs definiálása
Több kulcsot is definiálhatunk Több <xsl:sort> elem segítségével Példa Rendezzük az <employee> elemeket <region> szerint Majd az <employee> elemek azonos <region> elemben név szerint vannak rendezve <xsl:apply-templates select="employee"> <xsl:sort select="region"/> <xsl:sort select="name"/> </xsl:apply-templates>

61 Rendezés finomítása <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>

62 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

63 Számok formázása A format-number() segítségével Gyakori megoldások
format-number(number, format-string) Gyakori megoldások 0 a szükséges és # az opcionális számra Használjuk a ,-t mint csoportosító és a .-t mint decimális eválasztót format-number( , '#000') 12346 format-number( , '#,000.00') 12,345.73 format-number() használata <xsl:value-of select="format-number(salary, '#.00')"/>

64 Lokális szabályok format-number()-ben
Használjuk a <xsl:decimal-format> -ot a lokalizált szám formátum definiálására Példa <xsl:decimal-format name="Euro" grouping-separator="." decimal-separator=","/> format-number()-ben format-number(1234.5, '#,000.00', 'Euro') 1.234,50

65 Szóköz kezelése <A><B>Hello</B>
<xsl:strip-space elements="*"/> Példák Szóköz eltávolítása minden elemből Szóköz megtartása megadott csomópontoknál <xsl:strip-space elements="name address"/> <xsl:preserve-space elements="paragraph heading"/> Szóköz eltváloítása megadott csomópontokból Szóköz eltávolítása <xsl:strip-space> Szóköz megtartása <xsl:preserve-space> A B C Hello World a white space node a text node another text node <A><B>Hello</B> <C>World</C></A>

66 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 <xsl:output> segítségével megadhatjuk a kimenet típusát XML kimenet HTML kimenet Szöveg kimenet <xsl:output method="xml"… /> <xsl:output method="html"… /> <xsl:output method="text"… />

67 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 <xsl:output method="xml"/> elemben adhatjuk meg <xsl:output method="xml" encoding="iso " indent="yes" cdata-section-elements="company script" doctype-system="employees.dtd"/>

68 HTML, Szöveg kimenet A <xsl:output method="html"/> segítségével lehet a HTML kimenetet testreszabni <xsl:output method="html" encoding="iso " indent="yes"/> A <xsl:output method="text"/> segítségével lehet a szöveget testreszabni <xsl:output method="text" encoding="us-ascii"/>

69 Stíluslapok beszúrása
Egy stíluslap felhasználhat másik stíluslapokat Ugyanúgy kell használnunk őket Példa <xsl:stylesheet…> </xsl:stylesheet> Starter.xsl <xsl:stylesheet…> </xsl:stylesheet> <xsl:include href="Starter.xsl"/> <!–– use included rules ––>

70 Stíluslapok importálása
Egy stíluslap felhasználhat másik stíluslapokat Az importált stíluslapok felülírhatóak Példa <xsl:stylesheet…> </xsl:stylesheet> Starter.xsl <xsl:stylesheet…> </xsl:stylesheet> <xsl:import href="Starter.xsl"/> <!–– use or override imported rules ––>

71 Felülírt szabályok Felülírás engedélyezése <xsl:apply-imports>
Példa: <xsl:stylesheet…> <xsl:template match="salary"> … </xsl:stylesheet> Starter.xsl <xsl:stylesheet…> <xsl:import href="Starter.xsl"/> </xsl:stylesheet> <xsl:template match="salary"> </xsl:template> <B> <xsl:apply-imports/> </B>

72 Import sorrend Több stíluslapot tudunk beilleszteni és importálni
Import precedence rules apply A.xsl B.xsl import B.xsl New.xsl import A.xsl include C.xsl include E.xsl C.xsl D.xsl import D.xsl E.xsl import F.xsl F.xsl

73 Tippek Definiáljunk konzisztens numerikus formátumot
Ne használjuk az <xsl:output> 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: <xsl:include>, testreszabás: <xsl:import> Konzisztencia, skálázhatóság Fejlesztési, karbantartási idő csökken

74 A következő előadás tartalma
Menedzselt kód


Letölteni ppt "Fejlett Programozási Technikák 2."

Hasonló előadás


Google Hirdetések