You are on page 1of 16

5/21/2011

Bevezet

Objektumorientlt szoftvertervezs
XML a gyakorlatban

eXtensible Markup Language Cl: szabvnyos zenettads, trols HTML sikern felbuzdulva Visszanylik a szveghez
v. toString()

Ma: "Brmi a krds, XML a vlasz"

BME IIT, Goldschmidt Balzs

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

XML trtnet
GML
generalized markup language IBM, '60-as vek dokumentumlers
:h1.Chapter 1: Introduction :p.GML supported hierarchical containers, such as :ol :li.Ordered lists (like this one), :eol. as well as simple structures. :p.Markup minimization allowed the end-tags to be omitted for the "h1" and "p" elements.
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 3

XML trtnet
SGML
standard generalized markup language 1986 lexikonok (Magyar Nagylexikon), sztrak (OED), adatbzisok elgg XML-szer DTD megjelenik

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

XML trtnet
HTML
hypertext markup language 1991 weboldalak
ttrs eltte gopher, stb

XML jellemzi
Hierarchikus fa struktra
tag-ek, attribtumok s szveg

W3C szabvny
nyelvtan parse-olsi szablyok jlformltsg s validits

nem elgg rugalmas


kompatibilitsi problmk "this page is optimized for ObscureBrowser 11.3a"

Meta-struktra, tetszleges elemekkel bvthet

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

5/21/2011

XML jlformltsg
Szintaktikai szablyoknak val megfelels
opcionlis fejlc
<?xml version="1.0" encoding="UTF-8"?>

XML jlformltsg 2
megjegyzs
<!-- ez egy megjegyzs -->

tag attribtum
<img src="kep.xml"/>

minden tag-nek van zr-prja


<p>bekezds <img src="kep.xml"/> </p>

mindig idzjelek kztt

van gykrelem (dokumentum-elem) tag-ek egymsba gyazva

specilis jelek

&amp; &lt; &gt; &apos; &quot;

& < > ' "


8

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

XML validits
Szemantikai megktseknek val megfelels Megktsek megadsa
sma (schema) DTD (document type definition)

DTD Document Type Definition


XML 1.0 szabvny ta SGML-tl rklve Igen elterjedt Elavult
jabb dolgokat (pl. namespace) nem tmogatja nem XML-ben r le van, amit nem lehet benne kifejezni

Megadjk a dokumentum ltalnos struktrjt


milyen elemek engedlyezettek milyen hierarchiban milyen attribtumokkal ...
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 9

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

10

DTD 2
<!ELEMENT people_list (person*)> <!ELEMENT person (name, birthdate?, gender?, socialsecuritynumber?)> <!ELEMENT name (#PCDATA)> <!ELEMENT birthdate (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!ELEMENT socialsecuritynumber (#PCDATA)> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE people_list SYSTEM "example.dtd"> <people_list> <person> <name>Fred Bloggs</name> <birthdate>27/11/2008</birthdate> <gender>Male</gender> </person> </people_list>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 11 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 12

XML Namespaces

5/21/2011

XML nvterek
Mint a package Java-ban, vagy a namespace .NET-ben: logikai szeparci Nvtkzsek elkerlse XML-re pl szabvnyok erteljesen hasznljk
kvetkez rn: webszolgltatsok, SOAP, WSDL, WS-* szabvnyok

XML nvterek
Kt f jellemz:
prefix: ez csak ideiglenes nv URI: ez a lnyeg

Plda:

prefix

uri

<?xml version="1.0" encoding="UTF-8"?> <lib:library xmlns:lib=http://example.com/library> <lib:book> <lib:title>Anathem</lib:title> <lib:author>Neal Stephenson</lib:author> </lib:book> </lib:library>
13 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 14

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

Default nvtr
Prefix nlkl
az adott cscsnak s minden leszrmazottnak ez lesz a nvtere, amg fell nem brljuk

res nvtr
Ha nem hasznlunk nvtereket, akkor res az alaprtelmezett Plda: mintha itt sem lenne
<?xml version="1.0" encoding="UTF-8"?> <library xmlns=> <book> <title>Anathem</title> <author>Neal Stephenson</author> </book> </library>

Plda:
<?xml version="1.0" encoding="UTF-8"?> <library xmlns=http://example.com/library> <book> <title>Anathem</title> <author>Neal Stephenson</author> </book> </library>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

15

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

16

Egy URI, tbb prefix


Egy kzs URI-t tbbfle prefixszel is elnevezhetnk, a jelents ugyanaz marad Ugyanis csak az URI szmt, a prefix csak ideiglenes nv Plda:
<?xml version="1.0" encoding="UTF-8"?> <lib:library xmlns:lib=http://example.com/library> <lib:book> <lib2:title xmlns:lib2=http://example.com/library> Anathem </lib2:title> <lib:author>Neal Stephenson</lib:author> </lib:book> </lib:library>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 17

Prefix jradefinilsa
A prefix csak ideiglenes: felldefinilhat Ekkor a felldefinilt prefix rszfjban az j nvtr rvnyes Plda:
<?xml version="1.0" encoding="UTF-8"?> <lib:library xmlns:lib=http://example.com/library> <lib:book> <lib:title>Anathem</lib:title> <lib:author> <lib:person xmlns:lib=http://example.com/person> <lib:name>Neal Stephenson</lib:name> </lib:person> </lib:author> </lib:book> </lib:library>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 18

5/21/2011

Default nvtr jradefinilsa


Ekkor a felldefinilt rszfban az j nvtr rvnyes Plda:
<?xml version="1.0" encoding="UTF-8"?> <library xmlns=http://example.com/library> <book> <title>Anathem</title> <author> <person xmlns=http://example.com/person> <name>Neal Stephenson</name> </person> </author> </book> </library>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 19

Prefixek elre definilsa


Prefixeket elre is lehet definilni, nem ktelez a legmlyebb ponton Plda:
<?xml version="1.0" encoding="UTF-8"?> <lib:library xmlns:lib=http://example.com/library xmlns:pers=http://example.com/person> <lib:book> <lib:title>Anathem</lib:title> <lib:author> <pers:person> <pers:name>Neal Stephenson</pers:name> </pers:person> </lib:author> </lib:book> </lib:library>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 20

Prefixes-default keverhet
Prefixes s default nvterek keverhetk Plda:
<?xml version="1.0" encoding="UTF-8"?> <lib:library xmlns:lib=http://example.com/library> <lib:book> <lib:title>Anathem</lib:title> <lib:author> <person xmlns=http://example.com/person> <name>Neal Stephenson</name> </person> </lib:author> </lib:book> </lib:library>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 21

XML Schema Definition

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

22

XML Schema
W3C ajnls (2001) XML-lerst ad a dokumentum szerkezetrl
sztr (elemek s attribtumok nevei) tartalmi modell (kapcsolatok s struktra) adattpusok

XSD: Gykrelem
nvtr forrs nvtr nv <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">

Post-Schema-Validation Infoset (PSVI)


"tpust" ad a dokumentumunknak objektumknt kezelhetjk a dokumentumot

Az eredmny egy XML schema definition (XSD)


alaprtelmezett nvtr
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 23

ktelez nvtrhasznlat

cl nvtr

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

24

5/21/2011

XSD: Egyszer elem


<xs:element name="xxx" type="yyy"/>

XSD: Kezd s fix rtkek


Egyszer elem kezd s fix rtkkel
<xs:element name="xxx" type="yyy" default="zzz"/> <xs:element name="xxx" type="yyy" fix="qqq"/>

Sok fajta beptett tpus


xs:string xs:decimal xs:integer xs:boolean xs:date xs:time ...
<xs:element name="lastname" type="xs:string"/> <xs:element name="dateborn" type="xs:date"/> <lastname>Refsnes</lastname> <dateborn>1970-03-27</dateborn>
25

Plda:
<xs:element name="color" type="xs:string" default="blue"/> <xs:element name="pi" type="xs:decimal" fix="3.14159265358979323844"/>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

26

XSD: Attribtumok
<xs:attribute name="xxx" type="yyy"/> <xs:attribute name="xxx" type="yyy" default="qqq"/> <xs:attribute name="xxx" type="yyy" fix="qqq"/>

XSD: Tpusmegktsek
Begyazott tpusdefincival

Ktelez attribtum
<xs:attribute name="xxx" type="yyy" use="required"/>

<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:length value="8"/> </xs:restriction> </xs:simpleType> </xs:element>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

27

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

28

XSD: Tpusmegktsek
Kln tpusdefincival

XSD: Tpusmegktsek

<xs:element name="car" type="carType"/> <xs:simpleType name="carType"> <xs:restriction base="xs:string"> <xs:enumeration value="Zhiguli"/> <xs:enumeration value="Moskvitch"/> <xs:enumeration value="Zaporozhets"/> </xs:restriction> </xs:simpleType>

totalDigits fractionDigits minExclusive maxExclusive minInclusive maxInclusive

enumeration length minLength maxLength pattern whiteSpace

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

29

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

30

5/21/2011

XSD: sszetett elemek


<xs:element name="employee" type="personinfo"/> <xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType>

XSD: Tpusrkls
<xs:element name="employee" type="fullpersoninfo"/> <xs:complexType name="fullpersoninfo"> <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="country" type="xs:string"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>

begyazott megads is lehet


Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 31

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

32

XSD: Kevert sszetett elemek


Szveg s elemek egyszerre
<xs:element name="letter"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="orderid" type="xs:positiveInteger"/> <xs:element name="shipdate" type="xs:date"/> </xs:sequence> </xs:complexType> </xs:element>

XSD: Indiktorok
Sorrend:
all: minden elem, tetszleges sorrendben choice: pontosan egy elem sequence: minden elem, adott sorrendben

Gyakorisg:
maxOccurs: legfeljebb ennyiszer ismtldhet minOccurs: legalbb ennyiszer kell ismtldnie

Csoportosts:
group name: referencia ltrehozsa elemek egy csoportjra attributeGroup name: referencia ltrehozsa attribtumok egy csoportjra

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

33

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

34

XSD: Indiktor pldk


<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" maxOccurs="10"/> </xs:sequence> </xs:complexType> </xs:element>

XSD hivatkozsa XML-bl


Alaprtelmezett nvtr <?xml version="1.0"?> <note Smapldny xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Nvtr + sma elrse

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

35

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

36

5/21/2011

XSD plda: az alap XML dok.


<?xml version="1.0" encoding="ISO-8859-1"?> <shiporder orderid="889923" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="shiporder.xsd"> <orderperson>Gz Gza</orderperson> <shipto> <name>Cserp Virg</name> <address>Tr kz 3</address> <city>4567 Bkksbnat</city> </shipto> <item> <title>U.Eco: Foucault-inga</title> <note>Nem kell a bort</note> <quantity>1</quantity> </item> <item> <title>DJ Dick</title> <quantity>1</quantity> </item> </shiporder>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 37

XSD plda
Sma ltrehozsa
XSD dokumentum gykere <?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... // shiporder elem definci </xs:schema>

XML dokumentum gykere


Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 38

XSD plda
Shiporder elem definilsa
<xs:element name="shiporder"> <xs:complexType> <xs:sequence> ... // bels elemek: ... // orderperson, shipto, ... // item* </xs:sequence> </xs:complexType> ... // attribtumok: orderid </xs:element>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 39

XSD plda
Shiporder elem tartalma 1
<xs:element name="orderperson" type="xs:string"/> <xs:element name="shipto"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="address" type="xs:string"/> <xs:element name="city" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

40

XSD plda
Shiporder elem tartalma 2
Ismtld <xs:element name="item" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="note" type="xs:string" minOccurs="0"/> Opcionlis <xs:element name="quantity" type="xs:positiveInteger"/> </xs:sequence> </xs:complexType> </xs:element>

XSD plda
Shiporder elem tartalma 3
az attribtumot mindig utolsknt kell megadni!
<xs:attribute name="orderid" type="xs:string" use="required"/>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

41

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

42

5/21/2011

XML rekurzv begyazsa


<?xml version=1.0 encoding=UTF-8 ?> <po id=123> <billTo id=addr1> <company>XXX Warehouse</company> <street>Bell Park 12456.</street> <city>Boston</city> <postalCode>41776</postalCode> </billTo> <shipTo href=addr1> </po> <?xml version=1.0 encoding=UTF-8 ?> <example> . . . </example>
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 43

Megolds 1.
<?xml version=1.0 encoding=UTF-8 ?> <example> &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;po id=&quot;123&quot;&gt; &lt;billTo id=&quot;addr1&quot;&gt; . . . . . . </example>

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

44

Megolds 2.
<?xml version=1.0 encoding=UTF-8 ?> <example><![CDATA <?xml version=1.0 encoding=UTF-8 ?> <po id=123> <billTo id=addr1> <company>XXX Warehouse</company> <street>Bell Park 12456.</street> <city>Boston</city> <postalCode>41776</postalCode> </billTo> <shipTo href=addr1> </po> ]]></example>

XPath s XSLT

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

45

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

46

XPath
XML dokumentumban tallhat elemek lersra Hasonlan a knyvtrstruktra lershoz Tbb mint 100 fggvnyt definil Knyelmesen tudunk a dokumentumban elemeket elrni, referlni

XPath elrsek
csompontnv
adott nev csompont gyerekei

/
gykrelem

//
az aktulis elemtl vlaszt, mindegy, hogy milyen mlyen

.
aktulis elem

..
az aktulis elem szlje

@
attribtum
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 47 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 48

5/21/2011

XPath elrsek pldi


bookstore
kivlasztja a bookstore nev elem gyerekeit

XPath prediktumok
Szktshez, mindig szgletes zrjelben [] Sorrend fontos Pldk
/bookstore/book[1]
bookstore els book gyereke (IE5!!!)

/bookstore
kivlasztja a gykrben lev bookstore elemet

bookstore/book
kivlasztja a bookstore elem book gyerekt

//book
minden book elemet kivlaszt

/bookstore/book[last()]
bookstore utols book gyereke

bookstore//book
minden book elemet kivlaszt bookstore alatt

/bookstore/book[last()-1]
bookstore utols eltti book gyereke

//@lang
kivlasztja az sszes lang attribtumot
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 49

/bookstore/book[position()<6][lang='en']
bookstore els 5 book gyereke kzl az angol nyelvek
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 50

XPath prediktumok
Pldk (folyt)
//title[@lang]
minden title elem, amiben van lang attribtum

XPath dzsker-karakterek
A shell-helyettestshez hasonlan
*
brmely elem pl. /bookstore/* a bookstore sszes gyereke pl. /a/b/*/c

//title[@lang='hu']
minden title elem, amiben a lang attribtum rtke 'hu'

/bookstore/book[price>35.00]
minden book a bookstore-ban, aminek a price eleme nagyobb, mint 35.00

@*
brmely attribtum pl. //title[@*]az sszes olyan title, aminek van attribtuma

/bookstore/book[price>35.00]/title
minden olyan book-nak a title-je a bookstore-ban, aminek a price eleme nagyobb, mint 35.00

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

51

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

52

XPath csompont fggvnyek


Csompont tpusokra
node()
brmely csompont (elem vagy attribtum)

XPath g (axis)
Kivlaszt egy adott elem-halmazt az aktulis elemtl nzve
self
az elem maga

text()
szveg

parent
a szl

comment()
megjegyzs

ancestor / ancestor-or-self
az sszes s a fban (plusz az elem)

processing-instruction()
<?php echo $a; ?>

child
a gyermekek

descendant / descendant-or-self
az sszes leszrmazott a fban (plusz az elem)
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 53 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 54

5/21/2011

XPath g (axis) 2
following
minden, ami az elem utn jn az XML dokumentumban

XPath elrsi utak


Abszolt t
/lps/lps/...

following-sibling
az elem utni testvr-elemek

preceding
minden, ami az elem eltt van az XML dokumentumban

Relatv t
lps/lps/...

preceding-sibling
az elem eltti testvrek

namespace
az elem sszes nvtere

Lps
gnv::elemszkts[prediktum]

attribute
az elem attribtumai
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 55 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 56

XPath elrsi utak 2


Pldk
child::book
sszes book gyerek

XPath elrsi utak 3


child::text()
az sszes text gyerek

child::node()
az sszes csompont gyerek

attribute::lang
sszes lang attribtum

descendant::book
az sszes leszrmazott, ami book

child::*
az aktulis elem sszes gyereke

ancestor-or-self::book
az sszes s, aki book, belertve magt is

attribute::*
az aktulis elem sszes attribtuma

child::*/child::price
az sszes price unoka

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

57

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

58

XPath elrsi utak 4


Rvidtsek
attribute
//a/@href

XPath elrsi utak 4


Rvidts pldk
descendant-orself::node()/child::a/attribute::href //a/@href child::A/descendant-orself::node()/child::B[position()=1] A//B/*[1]

@ . // ..

self, self::node() descendant-or-self parent child

alaprtelmezett, ha az g nincs megadva

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

59

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

60

10

5/21/2011

XPath opertorok
alapmveletek
+ - * / div mod pl. //item[@price > 2*@discount]

XPath fggvnyek
Kzel 100 fggvny
fn:round(num) fn:concat(string,string,...) fn:substring(string,start,len) fn:month-from-dateTime(datetime) fn:name(nodeset) fn:index-of((item,item,...),searchitem) fn:reverse((item,item,...)) fn:avg((arg,arg,...)) fn:current-time() ...
61 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 62

logikai mveletek
and or

relcis mveletek
= != < <= > >=

halmaz-mvelet (uni)
| (fggleges vonal) pl. v[x or y] | w[z]
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

XSLT
Xml StyLe sheets Transformations
maga is XML-ben megadva

XML dokumentumok transzformcijt rja le


az dokumentumban lev ft alaktja t j dokumentumm az talakts szablyainak megadsval

Simple API for XML

XPath lerssal naviglhatunk


az egyes szablyokban az XPath-ban definilt mdon adhatjuk meg az elemeket

W3C ajnls
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 63 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 64

SAX
Simple API for XML Esemny-vezrelt
callback minta

SAX parser implementls


Esemnyek feldolgozsa
dokumentum eleje/vge elem (tag) eleje/vge prefixMapping eleje/vge karakterek (szveg) kihagyott entits whitespace-ek feldolgozsi utastsok

Soros elrs
alacsony memria-igny nagy sebessg nem lehet elre- vagy visszaugrani

llapotfggetlen feldolgozs
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 65

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

66

11

5/21/2011

ContentHandler interfsz
org.xml.sax.ContentHandler Ezt kell a parsernek megvalstani Az esemnyek feldolgozsa callback alapon res implementci
org.xml.sax.helpers.DefaultHandler minden metdus trzse res

ContentHandler
void startDocument() void endDocument()
dokumentum kezdete/vge

void startElement(String uri, String localName, String qName, Attributes atts) void endElement(String uri, String localName, String qName)
elem kezdete/vge: teljes s relatv nv, attribtumok

void startPrefixMapping(String prefix, String uri) void endPrefixMapping(String prefix)


az eltag nvtr megadsa

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

67

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

68

ContentHandler
void characters(char[] ch, int start, int length)
sima szveg (trhet is!)

Locator
Szksg lehet informcira, hogy merre is jrunk a fjlban void setDocumentLocator(Locator l)
int getColumnNumber()
aktulis elem oszlopa

void ignorableWhitespace(char[] ch, int start, int length)


elem tartalmban lev whitespace

void processingInstruction(String target, String data)


a gykrelem eltt/utn elfordul feldolgozsi utastsok

int getLineNumber()
aktulis elem sora

void skippedEntity(String name)


kihagyott elemek

String getPublicId()
a dokumentum publikus azonostja, ha van

void setDocumentLocator(Locator locator)


az esemnyek forrst lehet megkapni
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 69

String getSystemId()
a dokumentum neve (pl. fjlnv) URL formban
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 70

Dokumentum validls
Az eddig hasznlt parser nem validlt
SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); SAXParser p = factory.newSAXParser(); String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; p.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

Hibakezels
Hrom hibatpus
fatal error
a dokumentum nem jlformlt

error
a dokumentum nem valid

warning
figyelmeztets pl. ha ktszer definilunk egy tpust

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

71

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

72

12

5/21/2011

Hibakezels 2
Szintaktikai hiba
fatal error SAXParseException dobdik
org.xml.sax.SAXParseException: The element type "level3" must be terminated by the matching end-tag "</level3>". ... at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at javax.xml.parsers.SAXParser.parse(SAXParser.java:331) at MyParser.main(MyParser.java:16)

Hibakezels 3
Szemantikai hiba
(non-fatal) error csak ha van validls hibt le kell kezelni:
public void error(SAXParseException e) throws SAXParseException { throw e; }
org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'b'. One of '{level3}' is expected.

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

73

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

74

DOM
Document Object Model Felpti a dokumentum alapjn a fa reprezentcit A reprezentci mdosthat Kpes validlni

Document Object Model

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

75

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

76

DOM bevezet plda


try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(true); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new java.io.File(args[0])); ... } catch (Exception e) { e.printStackTrace(); }
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 77

Document
A dokumentumot reprezentl objektum
nem a gykr elem!

Lekrdezhetk alapadatok
doctype, XML verzi, stb

Gyrtani tud elemeket


attribtum, element, comment, stb.

Maga is egy Node

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

78

13

5/21/2011

Node
A fa egy eleme
element, attribtum, comment, text, stb.

Segdosztlyok
NodeList
mikor egy Node gyerekeit krjk el
NodeList Node.getChildNodes()

Lekrhetjk s mdosthatjuk az adatait


nevt, tpust, rtkt, stb.

Naviglhatunk benne
felfele: szl s dokumentum lefele: gyerekek oldalt: testvrek

int getLength()
a lista mrete

Node item(int index)


az index-edik elem

Mdosthatjuk a gyerekeit (hozzads, trls)


Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 79 Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 80

Segdosztlyok
NamedNodeMap
mikor egy Node attribtumait krjk el
NamedNodeMap Node.getAttributes()

Segdosztlyok
NamedNodeMap (folyt.)
Node removeNamedItem(String name) Node removeNamedItemNS(String namespaceURI, String localName)
trli az adott elemet a halmazbl s a Node-bl ha van default rtk, arra cserli

int getLength()
a halmaz mrete

Node item(int index)


az index-edik Node

Node getNamedItem(String name) Node getNamedItemNS(String namespaceURI, String localName)


az adott nev Node (nvtrrel egytt)
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 81

Node setNamedItem(Node arg) Node setNamedItemNS(Node arg)


mdostja az elem rtkt a nodeName attribtum alapjn trol
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 82

Plda: egyszer kirats


static void print(Node n, String tab) { System.out.println(tab+"("+n.getNodeName()+") \"" +n.getNodeValue()+"\""); if (n.hasAttributes()) { NamedNodeMap map = n.getAttributes(); for (int i = 0; i < map.getLength(); i++) { Node n1 = map.item(i); print(n1, tab+"attr: "); } } NodeList nl = n.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node n1 = nl.item(i); print(n1, tab+" "); } Rekurzi }
Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs 83

DOM specialitsok
XML tag neve a Node neve
getNodeName()

XML tag rtke a Node #text nev gyerek rtke


getNodeValue()

XML attribtum neve s rtke a Node neve s rtke


de van egy #text gyereke is az rtkkel

Objektumorientlt SW-tervezs BME IIT, Goldschmidt Balzs

84

14

5/21/2011

JDOM
Java- s XML-kzelibb objektum-modell
Attribute, CDATA, Comment, Content, DefaultJDOMFactory, DocType, Document, Element, EntityRef, Namespace, ProcessingInstruction, Text

JDOM
Szrk is bellthatk a leszrmazottkeresshez
org.jdom.filter.Filter
boolean matches(java.lang.Object obj)

Attribtumok, leszrmazottak knnyebben elrhetk, mdosthatk


nincs NamedNodeMap, NodeList helyette java.util.List
Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs 85

XSL transzformcik tmogatsa


org.jdom.transform.XSLTranformer

XPATH keressek tmogatsa (Jaxan)


org.jdom.xpath.XPath

Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs

86

JDOM
A beolvasst msra hagyja
DOMBuilder
DOM-bl pt

JDOM
SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new File("...")); Element e = doc.getRootElement(); List<Attributes> attrList = e.getAttributes(); ... List<Element> books = e.getChildren(); ...

SAXBuilder
SAX esemnyekbl pt

A dokumentum kimenthet
XML dokumentumknt DOM modellknt SAX esemny-genertorral

Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs

87

Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs

88

JDOM Element 1.
Attribute getAttribute(String name)
A megadott nev attribtumot kri le

JDOM Element 2.
String getName()
Az elem nevt adja vissza (nvtr nlkl)

List<Attribute> getAttributes()
Az sszes attribtumot visszadja listban

String getText()
Az elem szvegrsz(ei)t adja vissza

String getAttributeValue(...)
A megadott nev attribtum rtkt adja

Element getChild(String name)


A megadott nev gyerekelemet adja

Namespace getNamespace()
Az adott elem nvtert adja vissza

List<Element> getChildren()
Az sszes gyereket visszaadja listban

boolean isRootElement()
gykrelem-e az adott elem

String getChildText(String name)


A megadott gyerekelemhez tartoz szveget adja vissza.
Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs 89

Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs

90

15

5/21/2011

JDOM Attribute
getName()
Az attribtum nevt adja vissza

JDOM Namespace
Egy nvtr objektum a prefixet s az URI-t tartalmazza:
getPrefix() getURI()

getValue()
Az attribtum rtkt stringben adja vissza

getBooleanValue(), getIntValue(), getDoubleValue(), getFloatValue()


Az attribtum rtkt a megadott tpusra alaktva adja vissza.

getNamespace(), getNamespacePrefix(), getNamespaceURI()


A nvtr adatait adjk vissza
Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs 91 Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs 92

JDOM kimenet
Element e; e.addContent(...); e.setAttribute(...); ... XMLOutputter outputter = new XMLOutputter(); outputter.output(doc, new FileWriter("..."));

Integrlt fejleszts Java platformon BME IIT, Goldschmidt Balzs

93

16