430 likes | 539 Views
Előadás vázlat. Az XML története és alkalmazási területe Az XML alapelemei XML validáció (DTD, XML Schema) DOM. Az XML története.
E N D
Előadás vázlat • Az XML története és alkalmazási területe • Az XML alapelemei • XML validáció (DTD, XML Schema) • DOM
Az XML története • Az adatok formatált dokumentumként való tárolása megoldott a ’60-as évek óta. (Tex) Sajnos az ilyen dokumentumok feldolgozása programmal nehézkes, nem támogatják az adatok struktúrálását, az adatok közötti egyszerű keresést. Elsődleges céljuk az, hogy a dokumentum „jól nézzen ki” monitoron, illetve nyomtatásban.
Első lépés a generikus kódolás irányába ‘60-as évek vége felé a GCA volt. • Az igazi előrelépés a Generalized Markup Language (GML) volt, amit az IBM fejlesztett ki, és használt erősen a dokumentációk készítése során. A tartalomról információkat hordozó címkék (tag) használatának köszönhetően jól szerkeszthető és kereshető dokumentunokat lehetett benne definiálni • A ’80-as évek elején az ANSI felkérte a GML megalkotóit egy szabványos, általános dokumentum leíró nyelv kidolgozására. Ez lett az SGML.
Az SGML alapvetően egy eszköz saját markup nyelvek definiálására. • Az SGML terjedni kezdett, de széleskörű felhasználásra túl bonyolult volt. A generikus kódolásnak a ’90-es években Tim Berners-Lee és Anders Berglund adott a HTML definiálásával. Egyszerűbb volt használni, de visszalépést is jelentett, mivel sok, formázást előíró tag-et alkalmazott, ami miatt pont a struktúráltság veszett el, ráadásul nem lehet saját tag-eket definiálni. A web-nek köszönhetően azonban hamar elterjedt.
Az eredeti generikus alapokhoz való visszatérés jegyében jött létre az XML. Olyan nyelvet akartak létrehozni, amely lehetővé teszi markup nyelv definiálását kifejezetten a használni kívánt adatokhoz, egyértelműen interpretálható, egyszerű, a lehető legtöbb hiba ellenőrzést biztosítja, és elválasztja a megjelenítést a leírástól. • Az XML az SGML leszűkítése a sokak számára felesleges részek elhagyásával. (Ezzel szemben a HTML egy SGML-ben definiált markup nyelv!)
Egy XML dokumentum <?xml version="1.0" encoding="UTF-8"?> <mobil> <gyarto> Motorola </gyarto> <tipus> K1 </tipus> </mobil> (Példák forrása: Bátfai Norbert programozó Páternoszter melléklet, ppmkonyv.pdf )
Mire jó az XML? • Adat tárolás: Konfigurációs és egyéb átmeneti állományok egyszerű leírása. • Adat csere: Adatok XML dokumentumokon keresztüli cseréje. (webszolgáltatások, adatbázissal történő kommunikáció, platform független stb.) • A dokumentumokhoz külön megadható formázás. (stíluslapok, CSS) • A dokumentumok a megjelenítéshez transzformálhatóak. (XSL, pl. XML -> HTML) • Adat integritás biztosítása, adat ellenőrzés (parser, validálás)
Akkor mire nem jó az XML? • Az XML (önmagában) nem helyettesíthet egy adatbázist. A célja ugyan adatok tárolása, és van lehetőség a dokumentumon belüli keresésre is, de maga a dokumentum egy szekvenciális elérésű fájl ennek minden hátrányával. Nagy tömegű adat tárolására továbbra is DBMS rendszerek szükségesek. Kis mennyiségű adat esetén esetleg alkalmazható ebben a szerepkörben is.
Az XML dokumentum elemei • Document prolog: Az XML dokumentum ezzel az elemmel kezdődik. Meghatározza a használt XML verziót, a kódolást, illetve ha az XML dokumentum több darabból áll, akkor a parser-nek tudnia kell erről a tényről. • <?xml?> • <?xml version="1.0"?> • <?xml version='1.0' encoding='US-ASCII' standalone='yes'?> • <?xml version = '1.0' encoding= 'iso-8859-1' standalone ="no"?>
Tag-ek és XML elemek • Az XML elemek a dokumentum építőelemei. Tartalmazhatnak további XML elemeket és/vagy szöveget. Ezeket tag-ek határolják. • Üres elem: <xref linkend="abc"/> • Konténer elem: <p>This is a paragraph.</p> • Deklaráció: <!ENTITY author "Erik Ray"> • Feldolgozási előírás: <?print-formatter force-linebreak?> • Komment: <!— here's where I left off —> • CDATA szekció: <![CDATA[Ampersands galore! &&&&&&]]>
Attribútumok • Az XML elemekhez adhatóak attribútumok. Tulajdonképpen modellezési kérdés annak eldöntése, hogy a modellezés során valamely konkrét esetben elemet vagy attribútumot definiálunk. • <book contentType=”Fiction” format=”Hardback”>
Jól formáltság • Egy XML dokumentum akkor jól használható, ha teljesíti a jól formáltsági követelményeket. • A dokumetumot a document prolog vezeti be • Szükség van egy gyökér (legfelső szintű) XML elemre, ami az összes tübbit tartalmazza. • Minden nemüres XML elemhez szükséges egy nyitó és egy záró tag.
Minden üres XML elemet jelölő tag-nek tartalmaznia kell /-t a záró > előtt. • A tag-ek beágyazási sorrendjének megfelelőnek kell lennie. • Minden attribútum értéknek idézőjelek között kell szerepelnie. • Minden saját tag-nek az előírt formátumot teljesíteni kell. • A jólformáltság minden XML dokumentum fontos tulajdonsága, mert a szigorú szintaktika teszi lehetővé az egyszerű parser-ek írását.
<?xml version="1.0" encoding="UTF-8"?> <mobilbolt> <neve cime="http://norbi.boltja">Norbi MobilBoltja</neve> <mobil> <gyarto>Motorola</gyarto> <tipus>K1</tipus> <kep forrasa="k1.png" /> <kamera felbontas="2" /> <java midp="2.0" cldc="1.1" /> <kaphato ar="70000" allapot="jó"/> </mobil> <mobil> <gyarto>Nokia</gyarto> <tipus>6131</tipus> <kep forrasa="6131.png" /> <kamera felbontas="2" /> <java midp="2.0" cldc="1.1" /> </mobil> </mobilbolt>
Validáció • Az XML egyik nagy erőssége a dokumentum validáció. Többféle nyelv áll rendelkezésre ahhoz, hogy megadhassunk betartandó formai szabályokat. A legelterjedtebb a DTD és az XML Schema, de létezik még sok egyéb nyelv is. (Pl. RelaxNG, Schematron) A szabályok teljesülését az XML feldolgozó ellenőrizni tudja. • Habár hasznos megadni a használt nyelvtant, ez nem kötelező köszönhetően az XML szigorú szintaktikájának.
DTD • Az SGML-től örökölt nyelv. • Dokument típus deklaráció: A DTD fájl helye. <!DOCTYPE RootElement SYSTEM “filename.dtd”> • Elem típus deklaráció: XML elem leírása. <!ELEMENT Name (#PCDATA)> • Attribútum lista deklaráció: Egy elemtípus attribútumait definiálja. <!ATTLIST ElementName Name Datatype Default> • Egyed deklaráció: <!ENTITY Entity Name “text”>
Document prolog • A DTD leírások elhelyezhetők magában az XML dokumentumban, illetve külső állományban is. • Külön állományban: <?xml version=’1.0’ encoding=’UTF-8’?> <!ELEMENT mobil (gyarto,tipus)> <!ELEMENT gyarto (#PCDATA)> <!ELEMENT tipus (#PCDATA)>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mobil SYSTEM "mobil.dtd"> <mobil> <gyarto> Motorola </gyarto> <tipus> K1 </tipus> </mobil>
Beágyazva: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mobil [ <!ELEMENT mobil (gyarto,tipus)> <!ELEMENT gyarto (#PCDATA)> <!ELEMENT tipus (#PCDATA)> ]> <mobil> <gyarto> Motorola </gyarto> <tipus> K1 </tipus> </mobil>
XML elem deklaráció • XML elemek tartalmának leírása: • Bármit tartalmazhat: <!ELEMENT Name ANY> • Üres elem: <!ELEMENT Name EMPTY> • Kevert tartalom: <!ELEMENT Name (#PCDATA | ChildName)*> • Konténer elem: <!ELEMENT Name (Child1, Child2)>
További jelölések kevert elemekhez • Vessző (,): Listát definiál. <!ELEMENT customer (custNumber, lastName, firstName) > • Függőleges vonal (|): Vagy kapcsolat. <!ELEMENT books (book1 | book2)> • Nincs egyéb szimbólum: Az adott elem egyszer fordul elő.<!ELEMENT books (book)>
További jelölések kevert elemekhez • Plussz (+): Egy vagy több előfodulást jelöl. <!ELEMENT books (book+)> • Csillag (*): 0 vagy több előfordulást jelöl.<!ELEMENT books (book*)> • Kérdőjel (?): Egyszer vagy egyszer sem fordul elő az adott elem.<!ELEMENT books (book?)>
Attribútumom definiálása • Általános forma: <!ATTLIST element-name attribute-name datatype defaultvalue> • Többféle adattípus lehet (Pl. : CDATA, ID, ENTITY) • #REQUIRED: Az elem minden használatakor értéket kell adni az attribútumnak. • #IMPLIED: Az attribútum opcionális. Ha nem használt, akkor nincs alapértelmezett értéke. • #FIXED: Az attribútum opcionális, és ha szerepel, akkor a DTD-ben megadott kezdőértékű. • Value: Hagyományos alapértelmezett érték.
Egyedek • Az egyedek gyakorlatilag névvel ellátott szövegblokkok. Lehetnek általános és paramérter egyedek. • Az általámos egyedek az XML dokumentumban használhatóak, míg a paraméter egyedek a DTD leírásnan.
Általános egyedek • <!ENTITY entityName “replacementText”> <!ENTITY store1 “River Valley Center”> • Az egyedek később &entityName; alakban hivatkozhatók. • Az eddig definiáltak a belső egyedek. Hivatkozhatóak más dokumentunban és gépen megtalálható egyedek is. (külső egyedek)<!ENTITY entityName SYSTEM “system-identifier”> <!ENTITY entityName PUBLIC “system-identifier”>
Paraméter egyedek • <!ENTITY % entityName “replacementText”> • Hivazkozásuk: %entityName ; • Szintén léteznek belső és külső egyedek. Külső paraméter egyedek felhasználásával a DTD állományok kisebb, jól kezelhető és újrafelhasználható darabokra bonthatóak.
<?xml version=’1.0’ encoding=’UTF-8’?> • <!ELEMENT mobilbolt (neve, mobil*)> • <!ELEMENT neve (#PCDATA)> • <!ATTLIST neve cime CDATA #IMPLIED> • <!ELEMENT mobil (gyarto,tipus,kep,kamera,java,kaphato?)> • <!ELEMENT gyarto (#PCDATA)> • <!ELEMENT tipus (#PCDATA)> • <!ELEMENT kep EMPTY> • <!ATTLIST kep forrasa CDATA #IMPLIED> • <!ELEMENT kamera EMPTY> • <!ATTLIST kamera felbontas CDATA #IMPLIED> • <!ELEMENT java EMPTY> • <!ATTLIST java cldc CDATA #IMPLIED midp CDATA #IMPLIED • <!ELEMENT kaphato EMPTY> • <!ATTLIST kaphato ar CDATA #REQUIRED allapot (remek|jó|közepes|elmegy|rossz) "jó">
XML Schemas • W3X szabvány. • Olyan XML dokumentum, ami más XML dokumentum felépítéséről tárol információkat. • Célja megegyezik a DTD-vel, de itt az XML Schema specifikációban megadott tag-ek felhasználásával XML dokumentumot hozunk létre. • A DTD-vel szemben ez a leírás nem ágyazható be az XML dokumentum. • Sok beépített adattípust tartalmaz.
Az XML Schemas alapelemei • Document prolog • Séma elem: <xsd:schema xmlns:xsd= ”namespace”><xsd:schema xmlns: xsd=”http://www.w3.org/2001/XMLSchema” /> • Elem deklaráció: <xsd:element name=”name”> • Attribútum deklaráció: <xsd: attribute name=”name” type=”type”>
XML Prolog • A document prolog szabvány XML. • A gyökérelemként szolgál a séma elem leírás. Minden más elemet tartalmaz, illetve megadja a használt névteret. A névtér egy URL, ahol a használt XML szótár részletei találhatóak.<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”> • Az xsd: -al jelölt elemek ehhez a névtérhez tartoznak. Ha csak egy névteret használunk, akkor nem kell ezt a jelölést használni.
Elem deklarációk • Kétféle elem deklarációról beszélhetünk: egyszerű és komplex deklarációról. • Egyszerű esetben nem tartalmazhat az elem attribútumokat és további elemeket (csak szöveget), míg összetett esetben igen. • Egy egyszerű elem deklaráció:<xsd:element name=”date” type=”xsd:date”/>
Komplex elem deklaráció • A komplex elemeknél 4 féle tartalmi elrendezés lehetséges. • Szöveg: Csak szöveget tartalmaz az elem. • Üres: Nem tartalmazhat sem szöveget, sem egyéb elemet. (De attribútumot igen.)<xsd:element name=”source”> <xsd:complexType> <xsd:attribute name=”yearsInService” type=”xsd:positiveInteger”/> </xsd:complexType> <xsd:element>
Elem: Gyermek elemeket tartalmazhat.<xsd:element name=”bookInfo”> <xsd:complexType> <xsd:sequence> <xsd:element ref=”title”/> <xsd:element ref=”author”/> <xsd:element ref=”publisher”/> <xsd:element ref=”isbn”/> </xsd:sequence> </xsd:complexType> </xsd:element> • A sequence elem előírja, hogy az elemek ebben a sorrendben forduljanak elő; a choice elem esetén bármelyik bezárt elem előfodulhat; az all elem pedig nem ír elő semmit.
Kevert: Lehetnek benne elemek, és az elemek között szövegek is.<xsd:element name=”confirmOrder”> <xsd:complexType mixed=”true”> <xsd:sequence> <xsd:element ref=”opening”/> <xsd:element ref=”fullName”/> <xsd:element ref=”date”/> <xsd:element ref=”title”/> </xsd:sequence> </xsd:complexType> </xsd:element>
Komplex attribútum deklarációk • Definiálhatóak komplex típusok is. Ezek később az attribútum definíció „type” tagjában felhasználhatóak. <xsd:element name=”customer”> <xsd:complexType> <xsd:sequence> <xsd:element name=”firstName” type=”xsd:string”/> <xsd:element name=”lastName” type=”xsd:string”/> </xsd:sequence> <xsd:attribute name=”custNumber” type=”xsd:positiveInteger”/> </xsd:complexType> </xsd:element> • Attribútum deklarációnál use=„előírás” alakban adható meg az előfodulással kapcsolatos előírás. (Lásd DTD.) • Adhatóak megszorítások a saját adattípushoz.
Annotációk • Adott a lehetőség megjegyzés beszúrásásra:<xsd:element name=”books”> <xsd:annotation> <xsd:documentation xml:lang=”en”> This is a collection of best-selling books. </xsd:documentation> </xsd:annotation> </xsd:element>
1 • 2 <?xml version="1.0" encoding="UTF-8"?> • 3 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> • 4 <xs:element name="mobilbolt"> • 5 <xs:complexType> • 6 <xs:sequence> • 7 <xs:element name="neve"> • 8 <xs:complexType> • 9 <xs:simpleContent> • 10 <xs:extension base="xs:string"> • 11 <xs:attribute name="cime" type="xs:string"/> • 12 </xs:extension> • 13 </xs:simpleContent> • 14 </xs:complexType> • 15 </xs:element> • 16 <xs:element name="mobil" minOccurs="0" maxOccurs="unbounded"> • 17 <xs:complexType> • 18 <xs:sequence> • 19 <xs:element name="gyarto" type="xs:string"/> • 20 <xs:element name="tipus" type="xs:string"/> • 21 <xs:element name="kep"> • 22 <xs:complexType> • 23 <xs:attribute name="forrasa" type="xs:string"/> • 24 </xs:complexType> • 25 </xs:element> • 26 <xs:element name="kamera"> • 27 <xs:complexType> • 28 <xs:attribute name="felbontas" type="xs:string"/> • 29 </xs:complexType> • 30 </xs:element> • 31 <xs:element name="java"> • 32 <xs:complexType> • 33 <xs:attribute name="midp" type="xs:string"/> • 34 <xs:attribute name="cldc" type="xs:string"/> • 35 </xs:complexType> • 36 </xs:element>
<xs:element name="kaphato" minOccurs="0" maxOccurs="unbounded"> • 38 <xs:complexType> • 39 <xs:attribute name="ar" type="xs:decimal"/> • 40 <xs:attribute name="allapot"> • 41 <xs:simpleType> • 42 <xs:restriction base="xs:string"> • 43 <xs:enumeration value="remek"/> • 44 <xs:enumeration value="jó"/> • 45 <xs:enumeration value="közepes"/> • 46 <xs:enumeration value="elmegy"/> • 47 <xs:enumeration value="rossz"/> • 48 </xs:restriction> • 49 </xs:simpleType> • 50 </xs:attribute> • 51 </xs:complexType> • 52 </xs:element> • 53 </xs:sequence> • 54 </xs:complexType> • 55 </xs:element> • 56 </xs:sequence> • 57 </xs:complexType> • 58 </xs:element> • 59 </xs:schema>
Document Object Model • Az XML dokumentumokat egy XML feldolgozó alakítja át programokban felhasználható formátumúra. Ehhez ad egységes programozási interfészt a DOM. • Jó példa a DOM felhasználására a böngésző. • A DOM vizuálisan egy fával ábrázolható. Az XML dokumentum alkotóelemei a fában csomópontként jelennek meg.
A DOM csomópontok típusai • Gyökér: Az egész XML dokumentumot tartalmazza. • Dokumentum elem: A komment és feldolgozási utasításon kívül a dokumentum elemeit tartalmazza. (Azok a gyökér gyermekei.) • Elem • Szöveges • Attribútum • Névtér • Feldolgozási utasítás • Komment