XML az Extensible Markup Language (Kiterjeszthet jelöl nyelv) szavak rövidítése. XML a World Wide Web Konzorcium (W3C) ajánlása, amely kompatíbilis



Hasonló dokumentumok
XML alapú adatbázis-kezelés. (Katona Endre diái alapján)

Dokumentumformátumok Jelölő nyelvek XML XML. Sass Bálint Bevezetés a nyelvtechnológiába 2. gyakorlat szeptember 20.

DTD Dokumentumtípus definició

XML sémanyelvek Jeszenszky, Péter

XML (DTD) (XSD) DOM SAX XSL. XML feldolgozás

XML. XML dokumentumok alapszerkezete. XML ( / ) 5

XmlGessünk 13. rész - Az XML Schema II.

XMLgessünk 12. rész: Az XML Schema

XML és XSLT (a színfalak mögül)

Az XML kidolgozásakor a fejlesztés szempontjait tíz pontban foglalták össze:

Az XML szabvány. Az XML rövid története. Az XML szabvány

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla

Web-fejlesztés NGM_IN002_1

XML. Document Type Definitions (DTD) XML séma

Az XML Bevezetés. Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Utolsó módosítás:

Az XML dokumentumok adatmodellje

Az XML alapjai BME VIK BSc. Intelligens Rendszerek ágazat, Kooperatív rendszerek labor

Az XML S chema deklarációs nyelv oktatási s egédlet

Relációsémák létrehozása SQL nyelvben

A relációs adatmodell

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

URN használata hálózati dokumentumok azonosításában Országos Széchényi Könyvtár Könyvtár-informatikai M hely Budapest, június 12.

Adatkezelési mőveletek az XML nyelvben XQuery - XML dokumentumok lekérdezésére szolgáló lekérdezınyelv kifejezı ereje az OQL nyelvével egyenértékő.

XML avagy az univerzális információelérés álma

Az XML 1.0 szabvány. tanulmány. Készítette: Mészáros Tamás. Budapest, BME Méréstechnika és Információs Rendszerek Tanszék

3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla

az XML egy leírónyelv, másnéven meta-nyelv, mely segítségével új nyelveket írhatunk le egy XML dokumentum egy ilyen nyelvnek a példánya, a formális

A C programozási nyelv I. Bevezetés

ADATBÁZIS-KEZELÉS. Relációs modell

A C programozási nyelv I. Bevezetés

Az XML alapnyelv. dr. Paller Gábor. XML technológiák

Bevezetés: az SQL-be

Adatexport útmutató Könyvvizsgálói program számára átadott adatok XML formátumban

Java II. I A Java programozási nyelv alapelemei

Magas szintű adatmodellek Egyed/kapcsolat modell I.

XML adatkezelés. 5. témakör. Nincs explicit névtér kijelölve. <?xml version="1.0"?> <xs:schema xmlns:xs="

Java II. I A Java programozási nyelv alapelemei

Adatmodellezés. 1. Fogalmi modell

Adatbázisok. 4. gyakorlat. Adatmodellezés: E-K modellb l relációs adatbázisséma. Kötelez programok kiválasztása szeptember 24.

Zenetár a webszerverünkön,

SQLServer. DB Recovery modes

Adatkezelés - XML. XML 3 XML séma

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

XML sémák, adatmodellezés

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A

Webes űrlapok és az XForms ajánlás

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

HTML. Dr. Nyéki Lajos 2016

Általános nyomtatványok xml szerkezete. (v1.3)

Programozási nyelvek (ADA)

Forráskód formázási szabályok

Az XML pénzintézeti jelentések szintaxisa és feldolgozása (XmlPj)

Mveletek a relációs modellben. A felhasználónak szinte állandó jelleggel szüksége van az adatbázisban eltárolt adatok egy részére.

Orvos Bejelentő Program (OBP) rekordkép 2. verzió XML formátum

RELÁCIÓS ADATBÁZISSÉMÁK. Egyed-kapcsolat modellről átírás

BASH script programozás II. Vezérlési szerkezetek

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

ABR ( Adatbázisrendszerek) 1. Előadás : Műveletek a relációs medellben

34. Elsődleges kulcs megadása XMLSchema-ban Idegen kulcs megadása XMLSchema-ban Típusok kategóriái és saját típus megadásának

A szoftver és hardverfüggetlen adatbázis

Informatikai alapismeretek Földtudományi BSC számára

1. Az XML és XHTML nyelvek. Az XML leíró nyelv Szabályok XHTML írásra. Tartalom Az XML leíró nyelv

7. Előadás tartalma A relációs adatmodell

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

Web-fejlesztés NGM_IN002_1

Adatbáziskezelés alapjai. jegyzet

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

A PiFast program használata. Nagy Lajos

Java programozási nyelv

Debreceni Egyetem Informatikai Kar

SQL DDL-1: táblák és megszorítások

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

KML Keyhole Markup Language

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

5. Előadás tartalma Magas szintű adatbázismodellek Adatmodellezés

Félig-strukturált adatmodell (Semi-structured data model)

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Algoritmizálás és adatmodellezés tanítása 1. előadás

AWK programozás, minták, vezérlési szerkezetek

Szemantikus Web Semantic Web A szemantikus web alkalmas megközelítés, illetve megfelel nyelvekkel, eszközökkel támogatja az intelligens információs

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Occam 1. Készítette: Szabó Éva

Az intézeti kérdıív kezelı rendszer dokumentációja

Adatbázis, adatbázis-kezelő

Adatbázis rendszerek. dr. Siki Zoltán

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

XML / CSV specifikáció

Fejlett Adatbázis Technológiák - Jegyzet Dr. Adamkó, Attila

DIPLOMAMUNKA. Szűcs Béla. Debrecen PDF processed with CutePDF evaluation edition

PC Adatcsere program postafelügyeleti információk. Árinformációkat tartalmazó XML leírás. v.1.11.rev.1

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Globalizáció, Lokalizáció

importxml_ xls Oldal 1/

Programozás C és C++ -ban

Adatbázismodellek. 1. ábra Hierarchikus modell

Adatbázisok. 3. gyakorlat. Adatmodellezés: E-K modellb l relációs adatbázisséma. Kötelez programok kiválasztása szeptember 21.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

XPath. dr. Paller Gábor. XML technológiák

Átírás:

XML

XML az Extensible Markup Language (Kiterjeszthet jelöl nyelv) szavak rövidítése. XML a World Wide Web Konzorcium (W3C) ajánlása, amely kompatíbilis egy sokkal régebbi, SGML (Standard Generalized Markup Language = szabványos általánosított jelölnyelv) nev ISO 8879/1986 szabvánnyal. Az SGML megfelelség azt jelenti, hogy minden XML dokumentum egyben SGML dokumentum is, de fordítva már nem igaz, azaz van olyan SGML leírás, ami nem XML megfelel. Az XML azonban sokkal egyszerbb és jobban érthet, mint az SGML. Az XML jelenleg egy kész W3C ajánlás, ami azt jelenti, hogy végleges. http://www.xml.com

Az XML megjelenését az világhálón történ adatcsere tette szükségessé. Az XML kiegészíti a HTML-t. A HTML az web-oldalak leírásának nyelve. Egy HTML dokumentumban a szöveget tag-ek közé írjuk, a tag-ek <i>... </i> alakúak, segítségükkel írjuk le a szöveg megjelenítésének módját, a hyperlinkeket, képek beszúrását, stb. A világhálón megjelenített adat nagyrésze HTML oldalak segítségével történik. Az adatok sokszor relációs adatbázisból származnak. A megjelenített adat az ember számára olvasható ugyan, de semmi sem könnyíti a programok számára az adatok struktúrájának és tartalmának feldolgozását. Az XML-t kimondottan az adatok tartalmának leírására tervezték, és nem annak megjelenítésére

Az XML dokumentumok (hasonlóan a Java forráskódhoz) unicode alapú szöveges karaktersorozatok, ahol az alapértelmezés az UTF-8 (tömörített unicode), de a dokumentum elején ettl eltér kódolási eljárást is választhatunk. Az XML dokumentumokban az adatok értékein túl olyan további címkéket és hivatkozásokat helyezhetünk el, amik utalnak az adat természetére, a dokumentum szerkezeti és tartalmi felépítésére, továbbá ezek az információk felhasználhatók a dokumentum érvényességének vizsgálatához is.

Az XML három lényeges ponton különbözik a HTML-tl: tetszés szerint új elemek (tag) vezethetk be; a struktúra bármilyen mélységig beágyazható; az XML dokumentum tartalmazhat leírást a nyelvtanáról. Az XML állományok felépítése Minden XML dokumentum egy vezérlési utasítással kell kezddjön, melyben legalább azt meg kell adni, hogy a dokumentum melyik XML verzió szerint készült. Vezérlési utasítás: <?xml version="1.0" encoding="windows-1250"?>

Legyen egy relációs adatbázisunk, amelyben a SZEMELYEK tábla felépítése a következ: NEV VARCHAR(50) TELEFON VARCHAR(10) EMAIL VARCHAR(50) Tartalma: SzabóJános 413476 jani76@hotmail.com Kiss István 405406 isti91@hotmail.com Nagy Anna 113178 ani87@yahoo.com

<?xml version="1.0" encoding="windows-1250"?> <SZEMELYEK> <SZEMELY sorszam="1"> <NEV>Szabó János</NEV> <TELEFON>413476</TELEFON > <EMAIL>jani76@hotmail.com</EMAIL> </SZEMELY> <SZEMELY sorszam="2"> <NEV>Kiss István</NEV> <TELEFON>405406</TELEFON > <EMAIL>isti91@hotmail.com</EMAIL> </SZEMELY> <SZEMELY sorszam="3"> <NEV>Nagy Anna</NEV> <TELEFON>113178</TELEFON > <EMAIL>ani87@yahoo.com</EMAIL> </SZEMELY> </SZEMELYEK>

<?xml version="1.0" encoding="windows-1250"?> <SZEMELYEK> <SZEMELY sorszam="1" NEV="Szabó János"> <TELEFON>413476</TELEFON > <EMAIL>jani76@hotmail.com</EMAIL> </SZEMELY> <SZEMELY sorszam="2" NEV="Kiss István"> <TELEFON>405406</TELEFON > <EMAIL>isti91@hotmail.com</EMAIL> </SZEMELY> <SZEMELY sorszam="3" NEV="Nagy Anna"> <TELEFON>113178</TELEFON > <EMAIL>ani87@yahoo.com</EMAIL> </SZEMELY> </SZEMELYEK>

Egy XML dokumentumnak csak egy gyökere lehet, de minden dokumentumnak kötelezen rendelkeznie kell egy gyökér elemmel. Az XML dokumentum szerkezete hierarhikus, egy gyökér csomópontból és ennek gyerek csomópontjaiból épül fel. Minden XML dokumentum esetén kötelez: vezérlési utasítás + verzió információ, gyökér elem, kötelez bezáró pár, zárójelezési szabály. (Egy XML dokumentumban a nyitó és záró elemre a hagyományos zárójelezés szabályai érvényesek, a HTMLben megengedett <i><b>...</i></b> szerkezet nem érvényes.)

Karakterek, elnevezések Az XML dokumentumokban használt elemek neveiben, illetve az adatokban használt karakterek a következ szabályoknak kell megfeleljenek: A szabvány szerint az XML megkülönbözteti a kis és nagy betket (case sensitive). A HTML-el ellentétben az XML értelmezk nem veszik ki az adatokból a többszörös kihagyás jelleg (white space) karaktereket.

Elemek nevei a következ szabályokat kell betartsák: Elem név nem tartalmazhat kihagyást (space). Elem név nem kezddhet számmal vagy aláhúzás karakterrel. Elem név nem kezddhet az XML karatersorral. Elem névben nem ajánlott a mínusz (-), kettspont (:) és a pont (.) karakter. nincs fenntartott szó, adatok neveiben tetszleges karakterek lehetségesek, azzal a megkötéssel, hogy az elemzett adatokban kerülni kell a kisebb, a nagyobb, valamint az idéz jeleket. Ezek a jelek karakter kódokkal vagy speciális egyedekkel (&lt, &gt, &amp, stb.) adhatók meg.

Névterületek (namespaces) Névterületek célja, egyértelmen tudjunk elem és attribútum neveket használni XML és XML Schema dokumentumokban. Névterület: neveknek a kollekciója, melyet egy URI (Universal Resource Identifier) azonosít, tehát egyedi.

Név konfliktus elfordulhat, mert az XML nem tesz megkötést az elemek neveire vonatkozóan. két kölönböz forrásból származó XML dokumentumból egy új XML dokumentumot hozunk létre, akkor az új dokumentumban név konfliktusok adódnak. Példa: legyen egy cég részlegeinek és azok alkalmazottainak az adatai XML dokumentum formájában:

<?xml version="1.0" encoding="windows-1250"?> <RESZLEGEK> <RESZLEG> <NEV>Tervezés</NEV> <CIM> <VAROS>Kolozsvár</VAROS> <UTCASZAM>Bolyai utca 5</UTCASZAM> </CIM> <ALKALMAZOTTAK> <ALKALMAZOTT> <NEV>Szabó János</NEV> <TELEFON>413476</TELEFON > <CIM> <VAROS>Kolozsvár</VAROS> <UTCASZAM>Béke tér 3</UTCASZAM> </CIM>

<EMAIL>jani76@hotmail.com</EMAIL> </ALKALMAZOTT> <ALKALMAZOTT> <NEV>Kiss István</NEV> <TELEFON>405406</TELEFON > <CIM> <VAROS>Kolozsvár</VAROS> <UTCASZAM>Bucegi utca 4</UTCASZAM> </CIM> <EMAIL>isti91@hotmail.com</EMAIL> </ALKALMAZOTT> </ALKALMAZOTTAK> </RESZLEG> <RESZLEG> <NEV>BESZERZES</NEV> <CIM>

<VAROS>Temesvár</VAROS> <UTCASZAM>Petfi utca 15</UTCASZAM> </CIM> <ALKALMAZOTTAK> <ALKALMAZOTT> <NEV>Nagy Anna</NEV> <TELEFON>113178</TELEFON> <CIM> <VAROS>Temesvár</VAROS> <UTCASZAM>Horea utca 44</UTCASZAM> </CIM> <EMAIL>ani87@yahoo.com</EMAIL> </ALKALMAZOTT> </ALKALMAZOTTAK> </RESZLEG> </RESZLEGEK>

Megoldás név eltéttel (prefix) <?xml version="1.0" encoding="windows-1250"?> <RESZLEGEK> <reszl:reszleg> <reszl:nev>tervezés</reszl:nev> <reszl:cim> <reszl:varos>kolozsvár</reszl:varos> <reszl:utcaszam>bolyai utca 5</reszl:UTCASZAM> </reszl:cim> <alk:alkalmazottak> <alk:alkalmazott> <alk:nev>szabó János</alk:NEV> <alk:telefon>413476</alk:telefon > <alk:cim> <alk:varos>kolozsvár</alk:varos> <alk:utcaszam>béke tér 3</alk:UTCASZAM> </alk:cim>

<alk:email>jani76@hotmail.com</alk:email> </alk:alkalmazott> <alk:alkalmazott> <alk:nev>kiss István</alk:NEV> <alk:telefon>405406</alk:telefon > <alk:cim> <alk:varos>kolozsvár</alk:varos> <alk:utcaszam>bucegi utca 4</alk:UTCASZAM> </alk:cim> <alk:email>isti91@hotmail.com</alk:email> </alk:alkalmazott> </alk:alkalmazottak> </reszl:reszleg> <reszl:reszleg> <reszl:nev>beszerzes</reszl:nev> <reszl:cim> <reszl:varos>temesvár</reszl:varos>

<reszl:utcaszam>petfi utca 15</reszl:UTCASZAM> </reszl:cim> <alk:alkalmazottak> <alk:alkalmazott> <alk:nev>nagy Anna</alk:NEV> <alk:telefon>113178</alk:telefon > <alk:cim> <alk:varos>temesvár</alk:varos> <alk:utcaszam>horea utca 44</alk:UTCASZAM> </alk:cim> <alk:email>ani87@yahoo.com</alk:email> </alk:alkalmazott> </alk:alkalmazottak> </reszl:reszleg> </reszl:reszlegek> A dokumentum különböz részeit különböz eltéttel kiegészítve biztosítjuk a név egyediségét.

Megoldás névterület segítségével A névterület használata annyiban különbözik az eltét használatától, hogy az eltét els elfordulásakor definiálni kell, hogy az egy névterület és hozzá kell rendelni egy egyedi névterület nevet. <?xml version="1.0" encoding="windows-1250"?> <reszl:reszlegek xmlns:reszl="http://www.cs.ubbcluj.ro/reszl.html"> <reszl:reszleg> <reszl:nev>tervezés</reszl:nev> <reszl:cim> <reszl:varos>kolozsvár</varos> <reszl:utcaszam>bolyai utca 5</UTCASZAM> </reszl:cim> <alk:alkalmazottak xmlns="http://www.cs.ubbcluj.ro/alk.html"> <alk:alkalmazott> <alk:nev>szabó János</alk:NEV>

<alk:telefon>413476</alk:telefon > <alk:cim> <alk:varos>kolozsvár</alk:varos> <alk:utcaszam>béke tér 3</alk:UTCASZAM> </alk:cim> <alk:email>jani76@hotmail.com</alk:email> </alk:alkalmazott> <alk:alkalmazott> <alk:nev>kiss István</alk:NEV> <alk:telefon>405406</alk:telefon > <alk:cim> <alk:varos>kolozsvár</alk:varos> <alk:utcaszam>bucegi utca 4</alk:UTCASZAM> </alk:cim> <alk:email>isti91@hotmail.com</alk:email> </alk:alkalmazott> </alk:alkalmazottak> </reszl:reszleg> <reszl:reszleg>

<reszl:nev>beszerzes</reszl:nev> <reszl:cim> <reszl:varos>temesvár</reszl:varos> <reszl:utcaszam>petfi utca 15</reszl:UTCASZAM> </reszl:cim> <alk:alkalmazottak xmlns="http://www.cs.ubbcluj.ro/alk.html"> <alk:alkalmazott> <alk:nev>nagy Anna</alk:NEV> <alk:telefon>113178</alk:telefon > <alk:cim> <alk:varos>temesvár</alk:varos> <alk:utcaszam>horea utca 44</alk:UTCASZAM> </alk:cim> <alk:email>ani87@yahoo.com</alk:email> </alk:alkalmazott> </alk:alkalmazottak> </reszl:reszleg> </reszl:reszlegek>

Két névterületet definiáltunk, melyeknek egy-egy URL-t adtunk meg. Az XML értelmez ezt az URL-t nem használja, csak egy egyedi névnek tekinti. Sok esetben az XML készíti az URL által hivatkozott oldalon helyeznek el információt az adott névterületet illeten, de elfordul, hogy valamely technológia (pl. XSLT, XHTML) névterületének nevét a technológia értelmezje felhasználja a technológia azonosítására.

Elemek (Elements) a legalapvetbb részei az XML dokumentumoknak. Példa: <NEV>Szabó János</NEV> Egy XML elem részei: az elemet bevezet <ElemCimke> tag, amit csúcsos zárójelek között kell megadni. az elemhez tartozó adat (Pl. Szabó János). Nem minden elem tartalmaz adatot. az elemet záró </ElemCimke> tag. Fontos, hogy a címke nevek kifejezk legyenek.

a hagyományos XML meghatározás nem ad olyan precíz adatábrázoló és kezel eszközt a kezünkbe, mint a programozásban megismert típus fogalma, azonban már létezik olyan W3C ajánlás (XML Schema definíció), ami ennek a szigorú követelménynek is eleget tesz. elfordulhat, hogy egy tag nem fog közre semmilyen adatot. Példa: ha valakinek nincs e-mail címe: <EMAIL></EMAIL>. rövidíthetjük: <EMAIL/>. elemtípus név: az elemek kezdetét és végét határoló tagok azt mutatják, hogy az elem tartalma milyen típusú. (nem tagnév, sem elemnév) XML elemek (nem feltétlenül különböz) tartalommal rendelkez adat-elfordulások.

Példa-dokumentumot egy fával reprezentálhatjuk: gyökere a RESZLEGEK nevet viseli levelei: részleg neve, városa, utcája, a részleg minden alkalmazotta esetén neve, telefonszáma, városa, utcája és e-mail címe. A fa gyökerével reprezentált elemet a dokumentum gyökérelemének (dokumentumelem) nevezzük.

Minden XML dokumentumnak jól formázottnak (wellformated) kell lennie, hogy használhatók és helyesen értelmezhetk legyenek. Jól formázott a dokumentum: ha minden megnyitott elem le is van zárva, minden elemnek kell kezd- és záró tag-jénak lennie nem tartalmaz a sorrendbl kiágazó elemeket szintaktikusan megfelel a specifikációnak az elemek nem nyúlhatnak egymásba a dokumentumelem kivételével minden elemhez tartozzék befogadó elem, vagyis: egy XML dokumentum mindig reprezentálható legyen egy faszerkezettel, ahol a csomópontok az elemeket reprezentálják.

a valós világ dokumentumaira ers megszorítás az, hogy szerkezetük fával legyen reprezentálható. az XML dokumentumok világában a jól formáltság ezzel szemben (nem túl ers) követelmény. Az XML dokumentumokra elírt jól formáltság látszólag igen sok valós életbeli dokumentumot zár ki az XML dokumentumok világából, de csak látszólag. A nyelvi elemek részletes megismerésekor látni fogjuk, hogy a faszerkezetnél bonyolultabb szerkezettel leírható dokumentumok is elállíthatók XML dokumentumként.

XML és a félig-struktúrált adatmodell Féligstruktúrált adat XML dokumentummá T függvény segítségével, ha a féligstruktúrált adat OEM adatgráfja fa: T (atomiérték) = atomiérték; T ({e 1 :v 1,, e n :v n }) = <e 1 > T (v 1 )/e 1 > <e n > T (v n ) </e n >.

példa: Legyen a következ féligstruktúrált adat: T ({nev: {kereszt: "János", vezet: "Szabó"}, tel: 413476, email:"jani76@hotmail.com"}) = <nev> T ({kereszt: "János", vezet: "Szabó"}) </nev> <tel>413476</tel> <email>jani76@hotmail.com</email> = <nev> <kereszt>jános</kereszt> <vezet>szabó</vezet> </nev> <tel>413476</tel> <email>jani76@hotmail.com</email>

XML gráf modellje a félig-struktúrált adat (címke, részfa) él-címkézett gráffal ábrázoltuk az XML adat ábrázolása esetén a címkék a gráf csúcsaiba kerülnek. Karakterkészlet és kódrendszerek természetes nyelvekhez tartozó jelek (jelrendszerek) hozzávétele az elfogadható karakterek halmazához (ékezetes betk, az arab nyelv beti, cirill betk, az ázsiai képi jelek, stb.). új kódrendszer az UTF-8 (Unicode), 16 bites kódrendszer, amely természetes kiterjesztése az ASCII 7 bites kódrendszernek. az XML a Unicode kódrendszert és az általa reprezentált karakterkészletet használja.

Megjegyzések Az XML dokumentumban a HTML nyelvben megszokott megjegyzést használhatjuk. <!-- Ez egy XML megjegyzés --> ne tartalmazzon két egymást követ kötjel karaktert. ezeket a részeket az XML feldolgozó (elemz, érvényesség vizsgáló, megjelenít) alkalmazások figyelmen kívül hagyják.

Tulajdonságok (attributes) Az XML elemek tetszleges számú tulajdonsággal (attribútummal) is rendelkezhetnek. Példa: <SZEMELY sorszam="1" nev="szabó János"> A tulajdonságok általában így néznek ki: <element nev1="érték1" nev2="érték2"... > </element> attribútumok értékeinek idézjel között kell lenniük. az idézjel lehet egyszeres és ketts idézjel.

A tulajdonságok hasonló szerepet töltenek be, mint az adott elem gyermek elemei: valamilyen információval bvítik annak jelentéstartalmát. Példában: NEV szerepelt elemként, illetve tulajdonságként. Nincs elírás mikor kell egy adott adat tárolására gyermek elemet és mikor tulajdonságot használni.

Különbségek az elemek és attribútumaik között: Egy adott attribútum egy elemen belül csak egyszer jelenhet meg, míg egy elemen belül gyerek elemek ismétldhetnek. Az attribútumoknak nincsenek elemeik (nincsenek egymásba ágyazott attribútumok) Az attribútumok neveinek csak egy elemen belül kell egyedieknek lenniük. Az attribútumok nem bvíthetk olyan egyszeren, mint a gyermek elemek. Az attribútumokat nehezebb kezelni a programokban. Az attribútumok helyességét nehezebb ellenrizni. Ha az adat fontos, akkor elem formájában érdemes megadni. Tulajdonságokat akkor érdemes használni, ha azok nem az adatok, hanem az adatokat feldolgozó alkalmazások szempontjából jelentenek plusz információt.

Példa1: nem lényeges a kép neve, sem a típusa, csak maga a kép, a megjelenítéséhez viszont a megjelenítést végz alkalmazásnak szüksége van ezekre az információkra, ezért tulajdonság formájában adjuk meg: <image type="gif" name="picture.gif"/> Példa2: adat rekord halmazban az egyes rekordokat egyedi azonosítóval kell ellátni. Az azonosító a felhasználó szempontjából nem lényeges, azt csak a feldolgozó alkalmazás használja. <ALKALMAZOTT ALKID= 26043242 > <NEV>Nagy Anna</NEV> <TELEFON>113178</TELEFON> <EMAIL>ani87@yahoo.com<EMAIL> </ALKALMAZOTT>

Feldolgozási utasítások a feldolgozási utasítások nem részei az XML-nek szerepük a fordítóprogramoknak küldött direktívákhoz hasonlíthatók. a megjegyzésekhez hasonlóan, nem részei a dokumentum szöveges tartalmának, de követelmény az XML feldolgozókkal szemben, hogy továbbadják ezeket az utasításokat az alkalmazások számára. megadási módjuk: <?target name?> egy alkalmazás csak azokat az utasításokat veszi figyelembe, amelynek a célját felismeri, az összes többit figyelmen kívül hagyja. a célt (target) követ adatok az alkalmazásnak szólnak, megadásuk opcionális.

Dokumentum séma definició XML dokumentumok érvényesek (valid) lehetnek, de nem kell feltétlenül érvényesnek lenniük érvényes dokumentum az, amely megfelel a dokumentum séma definíciójának. Mire használjuk a dokumentum séma definícióját? ellenrizzük a különböz forrásból származó XML dokumentumok azonos típusúak, felhasználhatóak-e ugyanabban az alkalmazásban. egy készítend dokumentumnak milyen szabályokat kell betartania, hogy egy adott alkalmazásban felhasználható legyen. a dokumentum érvényességének a vizsgálatára

Több séma leíró módszer is létezik. A legelterjedtebb a DTD (Document Type Definition), szabványos, hátránya azonban, hogy nem XML alapú, és valószín a jövben nem fogják használni. XML alapú az XSD (XML Schema Definiton), mely hivatalosan is ajánlott, mint dokumentum típus leíró nyelv az XML dokumentumokhoz.

DTD (Document Type Definition) egy DTD meghatározza a nyelvtant és az elem-készletet az adott XML-formázáshoz. egy DTD egy XML dokumentumra vonatkozó szabálykészletet állít fel. a DTD önmagában nem egy specifikáció, hanem az XML specifikáció részeként szerepel. DTD az, ami az XML adatok hordozhatóságát biztosítja a DTD teszi lehetvé, hogy az XML állományt fogadó másik alkalmazás felismerje, hogyan kell a kapott állományt feldolgozni, és hogyan kell benne keresni.

Elemek deklarálása DTD-ben!DOCTYPE vezeti be a dokumentum típusának a deklarációját, utána közvetlen a gyökér elem nevének kell következnie. ezután következnek a gyermek elemek. <SZEMELYEK> <SZEMELY> <NEV>Szabó János</NEV> <TELEFON>413476</TELEFON > <EMAIL>jani76@hotmail.com</EMAIL> </SZEMELY> </SZEMELYEK>

Egy megfelel DTD: <!DOCTYPE SZEMELYEK [ <!ELEMENT SZEMELYEK (SZEMELY*)> <!ELEMENT SZEMELY (NEV,TELEFON,EMAIL)> <!ELEMENT NEV (#PCDATA)> <!ELEMENT TELEFON (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> ] > #PCDATA - Parsed Character Data - elemzett karakteres adat A levél elemek tartalmazhatnak nem elemzett karakteres adatot is, #CDATA (Character Data), interpretálás nélkül adódik át az XML adatfolyamot fogadó alkalmazásnak. <![CDATA [Ez egy tetszoleges karaktersor]]>

A DTD, mint nyelvtan <?xml version="1.0"?> <ab> <cim> <szemely> <cimzes>dr.</cimzes> <csaladnev>kelemen</csaladnev> <keresztnev>imre</keresztnev> </szemely> <utca>tavasz 12</utca> <varos>kolozsvar</varos> <megye>kolozs</megye> <iranyitoszam>400231</iranyitoszam> </cim>...

</ab> Ennek a DTD-je a következ lenne: <!DOCTYPE ab [ <!ELEMENT cim(szemely,utca,varos, megye,iranyitoszam)*> <!ELEMENT szemely(cimzes?, csaladnev,keresztnev+)> <!ELEMENT cimzes (#PCDATA)> <!ELEMENT csaladnev (#PCDATA)> <!ELEMENT keresztnev (#PCDATA)> <!ELEMENT utca (#PCDATA)> <!ELEMENT varos (#PCDATA)> <!ELEMENT megye (#PCDATA)> <!ELEMENT iranyitoszam (#PCDATA)> ]>

cim (szemely, utca, varos, megye, iranyitoszam)* k* alakú reguláris kifejezés, amely tetszleges számú, adott elemekbl felépített cím elemet jelöl. Használható reguláris kifejezések: k* (tetszleges számú elfordulás) k+ (legalább egy elfordulás) k? (egy vagy egy sem), k k (egyik a kettbl) k,k (összetevés). DTD megköveteli, hogy a <szemely>, <utca>, <varos>, <megye>, <iranyitoszam> a megadott sorrendben jelenjenek meg a <cim> elemben.

A nyelvtanok lehetnek rekurzívek is, Példa: bináris fát leíró DTD. <!DOCTYPE csucs [ <!ELEMENT csucs ( level (csucs,csucs) )> <!ELEMENT level (#PCDATA)> ]> megfelel XML adat: <csucs> <csucs> <csucs> <level> 1 </level> </csucs> <csucs> <level> 2 </level> </csucs> </csucs> <csucs> <level> 3 </level> </csucs> </csucs>

példa: Legyen egy relációs adatbázis séma: r1(a, b, c); r2(c,d). Egy XML reprezentációja a következ: <db> <r1><a> a1 </a> <b> b1 </b> <c> c1 </c> </r1> <r1><a> a2 </a> <b> b2 </b> <c> c2 </c> </r1> <r2><c> c2 </c> <d> d2 </d> </r2> <r2><c> c3 </c> <d> d3 </d> </r2> <r2><c> c4 </c> <d> d4 </d> </r2> </db>

Egy DTD a fenti XML adatfolyamnak: <!DOCTYPE db [ <!ELEMENT db (r1*, r2*)> <!ELEMENT r1 (a,b,c)> <!ELEMENT r2 (c,d)> <!ELEMENT a (#PCDATA)> <!ELEMENT b (#PCDATA)> <!ELEMENT c (#PCDATA)> <!ELEMENT d (#PCDATA)> ]> Ezzel a DTD-vel az r1 komponensei az a, b és c, az r2 komponensei a c és d, mégpedig pontosan ebben a sorrendben.

Elméletileg a relációs adatmodell esetén az oszlopok sorrendje nem számít, tehát a következ forma is megfelel: <!ELEMENT r1 ((a,b,c) (a,c,b) (b,a,c) (b,c,a) (c,a,b) (c,b,a))> <!ELEMENT r2 ((c,d) (d,c))> A fenti formában adott DTD esetén elször kell az r1 elemeknek megjelenniük és utána jöhetnek csak az r2 elemek. A következ forma megengedi, hogy az r1 elemek keveredjenek az r2 elemekkel. <!ELEMENT db ((r1 r2)*)>

DTD-t tárolhatjuk: az XML dokumentumban külön állományban, mondjuk a sema.dtd ben <!DOCTYPE db SYSTEM "sema.dtd"> A séma egy különböz URL-en is lehet, és akkor a hivatkozás: <!DOCTYPE db SYSTEM "http://www.schemaautorithy.com/sema.dtd"> Ez lehetvé teszi, hogy több web-oldal is ugyanazt a közös sémát használja, megkönnyítve így az adatcserét.

Tulajdonságok deklarálása a DTD-ben <!ATTLIST elem-név attribútum-név1 attributum-típus1 jelz... attribútum-név-n attributum-típusn jelz > példa: <!ATTLIST SZEMELY sorszam CDATA #REQUIRED> tudatja az elemz programmal, hogy a SZEMELY elemnek van egy sorszám nev tulajdonsága, mely egy tetszleges karakter sor (CDATA) és kötelezen szerepelnie kell az elem elfordulásában (#REQUIRED). Az elem-név annak az elemnek a neve, amelyhez a tulajdonság tartozik.

A tulajdonság típus lehetséges értékei: Típus Jelentés CDATA Nem ellenrzött karakter sor (en1 en2...) Az érték egy számozott lista valamely eleme lehet ID Az érték egy egyedi azonosító IDREF Az érték egy másik elem egyedi azonosítója IDREFS Más elemek egyedi azonosítóinak listája NMTOKEN Az érték egy érvényes XML név NMTOKENS Az érték érvényes XML nevek listája ENTITY Az érték egy egyed ENTITIES Az érték egyedek listája NOTATION Az érték egy megjegyzés neve Xml: Az érték elre definiált xml: érték

A jelz lehetséges értékei: #REQUIRED: Az attribútumot kötelezen, explicit módon meg kell adni az elem minden elfordulása esetén. #IMPLIED: Az attribútum megadása nem kötelez. Ha nincs érték megadva, az elemz tovább halad. Egy érték: Ha megadunk egy értéket, az lesz az attribútum alapértelmezett értéke. #FIXED érték : Az attribútum nem kötelez, de ha megadjuk, akkor az itt megadott értéknek kell lennie.

Egyedek (ENTITIES) DTD-ben az egyedek hasonlítanak a C nyelv #include, illetve #define lehetségeire elre definiált vagy küls erforrásban lev adatokat (szövegek, XML dokumentum részletek, stb.) újra felhasználhatunk. minden egyednek egy egyedi névvel kell rendelkeznie. legyen az EgyedNev egy egyednév.. A dokumentumban &EgyedNev; ( & jellel kezddik és ; -vel fejezdik be) formájában adjuk meg, viszont az egyedhez rendelt karakter fog megjelenni a dokumentumban.

Léteznek elre definiált egyedek, mint például a gt nev. Az > hatása olyan, mintha az XML adatfolyamba egybl a > jelet írtuk volna. Az egyedek fogalma lehetvé teszi azt is, hogy tetszleges unicode karaktert helyezzünk el a szövegbe. Ekkor az egyednév #szám vagy #xszám alakú, ahol az els a decimális, a második a hexadecimális megadási mód. A kis o hexa unicode kódja 0x0151. Ezt mint egyedet a következ módon hívhatjuk meg: ő.

Elre definiált egyed Egyed név < (a kisebb jel) Lt > (a nagyobb jel) Gt & (AND jel) Amp (egyszeres idézjel) Apos (dupla idézjel) Quot

saját egyedeket is létrehozhatunk <!ENTITY myegyed "az egyedhez rendelt szöveg"> &myegyed; -vel hívhatunk meg és az a hatása, mintha közvetlenül az az egyedhez rendelt szöveg karakterfzért írtuk volna le. Példa: <!ENTITY DOM "Document Object Model"> az XML dokumentumban az &DOM; karakter sor található, ott a Document Object Model szöveg jelenik meg.

Vannak paraméter egyedek, csak a DTD-ben használhatjuk, az XML dokumentumban nem. <!ENTITY % paraméter-egyed-név "az egyedhez rendelt szöveg"> Hivatkozni %paraméter-egyed-név; utasítással lehet egy paraméter egyedre. példa: Legyen a következ két egyed: <!ELEMENT Novella (Bevezet, Fejezet+, Befejezés)> <!ELEMENT Regény (Bevezet, Fejezet+, Befejezés)>

<!ENTITY % TARTALOM " Bevezet, Fejezet+, Befejezés"> <!ELEMENT Novella (%TARTALOM;)> <!ELEMENT Regény (%TARTALOM;)> A bels egyedeken kívül léteznek küls egyedek is, melyek lehetvé teszik, hogy egy másik állomány tartalmára hivatkozzunk az XML dokumentumból. A küls állomány tartalmazhat szöveges adatot, illetve bináris adatot.

Ha a küls file szöveges adatot tartalmaz, akkor az az eredeti dokumentumba illesztdik a referencia helyére és úgy kerül feldolgozásra, mintha a hivatkozó dokumentum része lenne. A bináris adat nem kerül értelmezésre. Küls egyed esetén az egyedhez rendelt szöveg helyett egy erforrás (URI/URL) mutat a bemásolandó adatra. <!ENTITY pelda SYSTEM "http://www.cs.ubbcluj.ro/pelda.xml">

Legyen például a következ XML dokumentum termékekrl: <termek> <nev nyelv="magyar" reszleg="zene"> fuvola </nev> <ar penznem="euro"> 420.12 </ar> </termek> A DTD: <!ATTLIST nev nyelv CDATA #REQUIRED reszleg CDATA #IMPLIED> <!ATTLIST ar penznem CDATA #IMPLIED> kötelez (#REQUIRED) opcionális (#IMPLIED).

Külön jelentséggel bírnak az ID, IDREF és IDREFS típusú deklarációk. Az ID típus azt jelenti, hogy az illet attribútum az elem egyedi azonósítóját tartalmazza. Az ID egy karaktersor. Ennek párja, az IDREF típus azt jelenti, hogy az attribútum értéke egy másik elem azonosítója (ID-je); IDREFS pedig azonosítók listájára vonatkozik. Ezen tulajdonságok segítségével az XML dokumentumnak gráf szerkezetet adhatunk, melynek nem kell feltétlenül fának lennie.

ID, IDREF és IDREFS: megszorításokat adhatunk meg az XML adatokra, A relációs adatmodell megszorításaihoz hasonlítva, o az ID elsdleges kulcs, o az IDREF pedig küls kulcs, következ eltérésekkel: ID típusú tulajdonság csakis karaktersor lehet, nincs rá lehetség, hogy más típust deklaráljunk neki. Nincs lehetség összetett kulcsok deklarálására, tehát ID típusa csak egy tulajdonságnak lehet. Ha egy XML dokumentumban több ID típusú tulajdonságot deklarálunk, mindegyik értéke egyedi lesz az egész dokumentumban.

Az IDREF típusú tulajdonság esetén nem tudjuk megadni, hogy a dokumentumban létez, melyik ID típusú tulajdonságra hivatkozik, csak annyit ellenriz a rendszer, hogy az IDREF értéke legyen egyenl egyik ID típusú attribútum értékével. IDREF típusú hivatkozás csakis dokumentumon belül lehetséges, dokumentumok között nem.

példa: A hivatkozások használatára egy egyszer példa: <!DOCTYPE csalad [ <!ELEMENT csalad (szemely*) > <!ELEMENT szemely (nev)> <!ELEMENT nev (#PCDATA)> <!ATTLIST szemely az ID #REQUIRED anya IDREF #IMPLIED apa IDREF #IMPLIED gyerekek IDREFS #IMPLIED> ]>

Egy, ehhez alkalmazkodó egyszer XML elem: <csalad> <szemely az="julia" anya="maria" apa="attila"> <nev> Kiss Júlia </nev> </szemely> <szemely az="attila" gyerekek="julia zoltan"> <nev> Kiss Attila </nev> </szemely> <szemely az="maria" gyerekek="julia zoltan"> <nev> Kiss Maria </nev> </szemely> <szemely az="zoltan" anya="maria" apa="attila"> <nev> Kiss Attila </nev> </szemely> </csalad>

példa: Egy másik példa egy zenés albumokat leíró DTD. Feltételezzünk, hogy egy eladónak több albuma is van, egy albumon több zeneszám jelenik meg, viszont egy zeneszám csak egy albumon jelenik meg, egy albumon azonos stílusú zeneszámok jelennek meg. <!DOCTYPE AlbumAB[ <!ELEMENT AlbumAB (Album*, Eladó*, Zeneszám*) > <!ELEMENT Album (ACíme, Stílus, MegjelenEve) > <!ELEMENT ACíme (#PCDATA)> <!ELEMENT Stílus (#PCDATA)> <!ELEMENT MegjelenEve (#PCDATA)> <!ATTLIST Album AlbumAzon ID #REQUIRED Eladója IDREF #IMPLIED Zeneszámai IDREFS #IMPLIED> <!ELEMENT Eladó (ENév, Nemzetiség) > <!ELEMENT ENév (#PCDATA)> <!ELEMENT Nemzetiség (#PCDATA)>

<!ATTLIST Eladó EladóAzon ID #REQUIRED Albumai IDREFS #IMPLIED> <!ELEMENT Zeneszám (SzCíme, Idtartam) > <!ELEMENT SzCíme (#PCDATA)> <!ELEMENT Idtartam (#PCDATA)> <!ATTLIST Zeneszám ZeneszámAzon ID #REQUIRED Albuma IDREF #IMPLIED> ]> XML adat, Zene.xml állományban van tárolva: <AlbumAB> <Album AlbumAzon ="DeadLetters" Eladója="Rasmus" Zeneszámai="Shadows Guilty"> <ACíme>Dead Letters</ACíme> <Stílus>rock</Stílus> <MegjelenEve>2003</MegjelenEve>

</Album> <Eladó EladóAzon="Rasmus" Albumai="DeadLetters"> <ENév>The Rasmus</ENév> <Nemzetiség>finn</Nemzetiség> </Eladó> <Zeneszám ZeneszámAzon="Shadows" Albuma="DeadLetters"> <SzCíme>In the Shadows</SzCíme> <Idtartam>3.35</Idtartam> </Zeneszám> <Zeneszám ZeneszámAzon="Guilty" Albuma="DeadLetters"> <SzCíme>Guilty</SzCíme> <Idtartam>3.4</Idtartam> </Zeneszám>

</AlbumAB> több ID típusú tulajdonság is van az XML dokumentumban: ZeneszámAzon, AlbumAzon, EladóAzon, ezek értékei az egész dokumentumban egyedieknek kell lenniük, azt jelenti nem lehet például Shadows azonosítójú album is és zeneszám is. A zeneszám esetén az Albuma IDREF típusú, de nem tudtuk megadni, hogy ez egy AlbumAzon-nak kell lennie, következésképpen, a rendszer egy Albuma típusú tulajdonság esetén ellenrzi, hogy a megadott érték egy létez ID típusú tulajdonság értéke-e, mely lehet ZeneszámAzon, AlbumAzon vagy EladóAzon is. A leírt séma segítségével minden albumról szóló információ csak egyszer kerül tárolásra, hasonlóan a zeneszámok, illetve eladók esetén is.

ugyanezt a sémát megadhatjuk attribútumok nélkül, csak elemekkel vigyáznunk kell, hogyan tervezzük meg, ne ismételjünk információt ha a zeneszámot helyezzük a gyökérbe és azon belül gyerek elem az album, egy albumon található minden szám esetén ismételjük az albumról szóló adatokat. ha az albumok keretén belül tároljuk az eladót, ismételni fogjuk az eladó információit, az összes zeneszáma, összes albuma esetén. fontos, hogy ne fordítsuk meg a hierarchiát. lásd a faszerkezetet a következ példában.

<!DOCTYPE AlbumAB2[ <!ELEMENT AlbumAB2 (Eladó*,) > <!ELEMENT Eladó (Enév, Nemzetiség, KezdoEv, Album*) > <!ELEMENT Enév (#PCDATA)> <!ELEMENT Nemzetiség (#PCDATA)> <!ELEMENT KezdoEv (#PCDATA)> <!ELEMENT Album (Acíme, Stílus, MegjelenEve, Zeneszám*) > <!ELEMENT Acíme (#PCDATA)> <!ELEMENT Stílus (#PCDATA)> <!ELEMENT MegjelenEve (#PCDATA)> <!ELEMENT Zeneszám (SzCíme, Idtartam) > <!ELEMENT SzCíme (#PCDATA)> <!ELEMENT Idtartam (#PCDATA)> ]>

XML adatok, melyek megfelelnek a fenti DTD-nek: <AlbumAB2> <Eladó> <ENév>Linkin Park</ENév> <Nemzetiség>amerikai</Nemzetiség> <KezdoEv>2001</KezdoEv> <Album> <ACíme>Meteora</ACíme> <Stílus>hard rock</stílus> <MegjelenEve>2003</MegjelenEve> <Zeneszám> <SzCíme>Numb</SzCíme> <Idtartam>3.06</Idtartam> </Zeneszám> <Zeneszám> <SzCíme>Faint</SzCíme>

<Idtartam>2.42</Idtartam> </Zeneszám> </Album> <Album> <ACíme>Hybrid Theory</ACíme> <Stílus>hard rock</stílus> <MegjelenEve>2001</MegjelenEve> <Zeneszám> <SzCíme>In the End</SzCíme> <Idtartam>3.37</Idtartam> </Zeneszám> <Zeneszám> <SzCíme>Papercut</SzCíme> <Idtartam>3</Idtartam> </Zeneszám> </Album>

</Eladó> <Eladó> </Eladó> </AlbumAB2> a séma egy fát ír le, viszont az els séma nagyobb szabadságot ad a tervezésre. az els séma segítségével megengedhetjük, hogy egy albumnak több eladója is legyen, egy szám több albumon is megjelenjen, vagyis az adatok már nem fa szerkezetben, hanem gráf formájában vannak. az adatok csak egyszer kerülnek tárolásra, de több helyrl is hivatkozunk ugyanarra az adatra.

<!DOCTYPE AlbumAB3[ <!ELEMENT AlbumAB3 (Album*, Eladó*, Zeneszám*) > <!ELEMENT Album (ACíme, Stílus, MegjelenEve) > <!ELEMENT ACíme (#PCDATA)> <!ELEMENT Stílus (#PCDATA)> <!ELEMENT MegjelenEve (#PCDATA)> <!ATTLIST Album AlbumAzon ID #REQUIRED Eladói IDREFS #IMPLIED Zeneszámai IDREFS #IMPLIED> <!ELEMENT Eladó (ENév, Nemzetiség) > <!ELEMENT ENév (#PCDATA)> <!ELEMENT Nemzetiség (#PCDATA)> <!ATTLIST Eladó EladóAzon ID #REQUIRED Albumai IDREFS #IMPLIED> <!ELEMENT Zeneszám (SzCíme, Idtartam) > <!ELEMENT SzCíme (#PCDATA)>

<!ELEMENT Idtartam (#PCDATA)> <!ATTLIST Zeneszám ZeneszámAzon ID #REQUIRED Albumai IDREFS #IMPLIED> ]>

Az XML séma egy másik lehetség egy XML dokumentum struktúrájának megadására az XML séma. (XML Schema) a séma segítségével pontosabban meg lehet határozni a dokumentum struktúráját, és a programozási nyelvekbl ismert adattípusokhoz hasonló típusokat is lehet használni. a DTD 10 típust ismer, az XML séma 44-et. tetszleges típus is definiálható a sémában, illetve megszorításokat is értelmezhetünk. bizonyos szinten objektum-orientált elemeket is tartalmaz, létez típusokból újakat tervezhetünk, illetve létez típusok leszkíthetk.

az XML séma szintaxisa megegyezik az XML dokumentum szintaxisával, így könnyebb elemezni mint a DTD-t, amelynek saját szintaxisa van. Példa: <!ELEMENT bibliográfia (könyv+)> <!ELEMENT könyv (cím, szerz, év, ISBN, kiadó)> <!ELEMENT cím (#PCDATA)> <!ELEMENT szerz (#PCDATA)> <!ELEMENT év (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT kiadó (#PCDATA)>

XML séma segítségével: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.cs.ubbcluj.ro/bibl" xmlns="http://www.cs.ubbcluj.ro/bibl" elementformdefault="qualified"> <xsd:element name="bibliográfia"> <xsd:complextype> <xsd:sequence> <xsd:element ref="könyv" minoccurs="1" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element>

<xsd:element name="könyv"> <xsd:complextype> <xsd:sequence> <xsd:element ref="cím" minoccurs="1" maxoccurs="1"/> <xsd:element ref="szerz" minoccurs="1" maxoccurs="1"/> <xsd:element ref="év" minoccurs="1" maxoccurs="1"/> <xsd:element ref="isbn" minoccurs="1" maxoccurs="1"/> <xsd:element ref="kiadó" minoccurs="1" maxoccurs="1"/> </xsd:sequence> </xsd:complextype> </xsd:element>

<xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/> <xsd:element name="év" type="xsd:integer"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:schema> A séma definíció a schema kulcsszó megadásával kezddik. A sémához egy séma névteret rendelünk: <xsd:schema xmlns:xsd=http://www.w3.org/2001/xmlschema A megadott címen létezik egy XMLSchema.xsd, mely, elre definiált elemek és adattípusok, többek között a: complextype, element, sequence, schema, boolean, string, integer értelmezését tartalmazza

a séma névterületéhez egy névterület eltétet rendeltünk. általában XML sémának az xsd eltétet szokták használni. eltétet használva, a típusokat minsítjük, segítünk az elemznek azonosítani a típusokat a különböz névterekben. mivel névterület eltéttel láttuk el a séma névterületet, névterület eltéttel kell az itt értelmezett típusokat, mint a complextype, element, sequence, stb. is ellátnunk.

http://www.cs.ubbcluj.ro/bibl (targetnamespace) http://www.w3.org/2001/xmlschema complextype element schema sequence bibliográfia szerz könyv cím kiadó ISBN év Ez az ábécé, amit az XML séma nyújt, hogy definiáljuk a mi ábécénket.

o a sémánk által deklarált elemek: bibliográfia, könyv, cím, szerz, év, ISBN, kiadó a targetnamespace által megadott névterületbe kerülnek. o ezt a névterületet nem láttuk el eltéttel, ez lesz az alapértelmezett (default), ezért nem kell az ebben értelmezett elemeket, típusokat sem eltéttel ellátnunk. o megadhatjuk a fenti XML sémát úgy is, hogy az általunk értelmezett séma névteret látjuk el eltéttel, mondjuk bib, és a www.w3.org/2001/xmlschemaáltal adott séma lesz az alapértelmezett, ekkor a séma a következképpen alakul:

<?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.cs.ubbcluj.ro/bibl" xmlns:bib="http://www.cs.ubbcluj.ro/bibl" elementformdefault="qualified"> <element name="bibliográfia"> <complextype> <sequence> <element ref="bib:könyv" maxoccurs="unbounded"/> </sequence> </complextype> </element> <element name="book"> <complextype> <sequence>

<element ref="bib:cím"/> <element ref="bib:szerz"/> <element ref="bib:év"/> <element ref="bib:isbn"/> <element ref="bib:kiadó"/> </sequence> </complextype> </element> <element name="cím" type="string"/> <element name="szerz" type="string"/> <element name="év" type="string"/> <element name="isbn" type="string"/> <element name="kiadó" type="string"/> </schema>

nem kell a complextype, element, string, stb. kulcsszavakat eltéttel ellátnunk, viszont az általunk értelmezett elemekre való hivatkozás esetén eltétet kell használnunk. a ref kulcsszó segítségével hivatkozunk egy elem deklarációra. Az els séma esetén a ref="könyv" nincs eltéttel ellátva, így az alapértelmezett névterületben leírt könyv elemre hivatkozik, mely az els esetben a cél névterület (targetnamespace). a második esetben a cél névterületet eltéttel láttuk el, így szükséges a hivatkozás esetén is az eltét: ref="bib:könyv".

A gyerek elemeket megadhatjuk rögtön a szül elem után, ún. inline deklarációval. <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.cs.ubbcluj.ro/bibl" xmlns="http://www.cs.ubbcluj.ro/bibl" elementformdefault="qualified"> <xsd:element name="bibliográfia"> <xsd:complextype> <xsd:sequence> <xsd:element name="könyv" maxoccurs="unbounded"> <xsd:complextype> <xsd:sequence>

<xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/> <xsd:element name="év" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema>

Ha a fenti XML séma a http://www.cs.ubbcluj.ro/bibl címen a bibliografia.xsd állományban található, az XML állományból az XML sémát a következképpen adhatjuk meg: <?xml version="1.0"?> <bibliográfia xmlns="http://www.cs.ubbcluj.ro/bibl" xmlns:xsi= http://www.w3.org/2001/xmlschema-instance xsi:schemalocation= "http://www.cs.ubbcluj.ro/bibl bibliografia.xsd"> <könyv> <cím>an Introduction to Database Systems, 8 th Edition</cím> <szerz>c. J. Date</szerz> <megjév>2004</év>

<ISBN>973-86190-1-7</ISBN> <kiadó>pearson, Addison Wesley</kiadó> </könyv>... </bibliográfia> a http://www.w3.org/2001/xmlschema-instance címen egy újabb névterület jelenik meg, mely tartalmazza a schemalocation definicióját, a példában ezt a névteret xsi eltéttel láttuk el, ebbl a névterületbl használjuk a schemalocation attribútumot. A schemalocation egy érték pár formájában adja meg a séma ellenrznek, hogy a séma a bibliografia.xsd a http://www.cs.ubbcluj.ro/bibl névterületbl származik.

XMLSchema-instance névterület http://www.w3.org/2001/xmlschema-instance schemalocation nonamespaceschemalocation ni l type

egy XML állomány, melynek szerkezetét egy séma adja meg, helyesnek tekinthet, ha megfelel a megadott sémának, mely viszont akkor helyes, ha megfelel a sémák sémájának (XMLSchema) a targetnamespace = http://www.cs.ubbcluj.ro/bibl utasítás segítségével a bibliografia.xsd-ben elemeket deklarálunk az adott névterületben, melyet a bibliografia.xml felhasznál, megadva ezt a schemalocation=http://www.cs.ubbcluj.ro/bibl bibliografia.xsd utasítás segítségével. a cím, szerz, év, ISBN és kiadó elemek deklarálásakor a minoccurs és maxoccurs csak az els példa esetén jelenik meg, utána már nem. lehetséges, mert ezek alapértelmezett értéke = 1.

bibliografia.xml bibliografia.xsd XMLSchema.xsd Ellenrzi, hogy az XML dokumentum megfelel-e a bibliografia.xsd séma leírásnak Ellenrzi, hogy a bibliográfia.xsd egy olyan séma-e, mely megfelel a sémák sémájában leírt szabályoknak

Típus értelmezése: Az összetett elem deklarálásának általános formája: <xsd:element name="név" type="típus" minoccurs="int" maxoccurs="int"/> vagy <xsd:element name="név" minoccurs="int" maxoccurs="int"> <xsd:complextype> </xsd:complextype> </xsd:element> Mi eddig a második formáját használtuk az összetett elem deklarálásnak, például a könyv elem esetén.

Lássunk most példát az összetett elem els típusú deklarálására, ahol nevet adunk a típusnak és az elem deklarálásakor hivatkozunk a megnevezett típusra. <xsd:element name="a" type="atípusa"/> <xsd:complextype name="atípusa"> <xsd:sequence> <xsd:element name="b" /> <xsd:element name="c" /> </xsd:sequence> </xsd:complextype>

Ez a deklaráció ekvivalens a következvel, amit inline típusdeklarációnak is nevezhetünk: <xsd:element name="a"> <xsd:complextype> <xsd:sequence> <xsd:element name="b" /> <xsd:element name="c" /> </xsd:sequence> </xsd:complextype> </xsd:element>

A fenti két ekvivalens deklarációt együtt nem lehet használni, ily módon nem helyes a következ séma definíció: <xsd:element name="a" type="atípusa"> <xsd:complextype> <xsd:sequence> <xsd:element name="b" /> <xsd:element name="c" /> </xsd:sequence> </xsd:complextype> </xsd:element>

A bibliográfiával kapcsolatos példa átírva az elem els típusú deklarációjával: <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.books.org" xmlns="http://www.books.org" elementformdefault="qualified"> <xsd:element name="bookstore"> <xsd:complextype> <xsd:sequence> <xsd:element name="könyv" type="kkiadvány" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element>

<xsd:complextype name="kkiadvány"> <xsd:sequence> <xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/> <xsd:element name="év" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:schema>

Az XML séma definíció lehetséget ad új (derivált) típus deklarálására, mely egy alaptípus kibvítésével vagy leszkítésével jön létre. Példa: Kiadvány nev típusa alaptípus, mely három elemet tartalmaz. A KönyvKiadvány típus a Kiadvány típus deriváltja, annak három eleme mellé még két elemet deklarál. <?xml version="1.0"?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/xmlschema targetnamespace="http://www.books.org" xmlns="http://www.books.org" elementformdefault="qualified"> <xsd:complextype name="kiadvány" <xsd:sequence> <xsd:element name="cím"type="xsd:string"/> <xsd:element name="szerz"

type="xsd:string" maxoccurs="unbounded"/> <xsd:element name="év" type="xsd:gyear"/> </xsd:sequence> </xsd:complextype> <xsd:complextype name="könyvkiadvány"> <xsd:complexcontent> <xsd:extension base="kiadvány" > <xsd:sequence> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:sequence> </xsd:extension> </xsd:complexcontent> </xsd:complextype>

<xsd:element name="könyvbibliográfia"> <xsd:complextype> <xsd:sequence> <xsd:element name="könyv" type="könyvkiadvány"maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema>

Egyszer típusok deklarálása: Az egyszer típusok nem tartalmazhatnak elemeket, attribútumokat, csak beépített egyszer típusokat tartalmazhatnak, mint int, datetime, string, ID, IDREF, IDREFS, language, gyear (Gregorian év). További beépített típusokat lásd az XMLSéma definíciójánál a http://www.w3.org/tr/xmlschema-2/ (Datatypes) címen.

példa: Legyen egy egyszer típus, mely egy PC gyártási éve, a gregorianus évre alapszik és lehetséges értékei 1990 és 2010 között vannak. <xsd:simpletype name="gyartasiev" <xsd:restriction base="xsd:gyear"> <xsd:mininclusive value="1990/"> <xsd:maxinclusive value="2010/"> <xsd:restriction> <xsd:simpletype>

Egy egyszer típust a nevével adunk meg, majd a restriction elem segítségével megadjuk azt a típust, melyre alapszik az új egyszer típus és további ún. facet adható meg. Általános formája: <xsd:simpletype name= "név"> <xsd:restriction base= "xsd:egyszertípus"> <xsd:facet value= "érték"/> <xsd:facet value= "érték"/> </xsd:restriction> </xsd:simpletype> Az egyszertípus amit a restriction kulcsszó után megadunk, a legtöbb esetben egy beépített típus, de építhetünk felhasználó által értelmezett egyszer típusokra is.

A W3C ajánlatban a következ facet -ek szerepelnek: length minlength maxlength pattern enumeration whitespace maxinclusive mininclusive maxexclusive minexclusive totaldigits fractiondigits Nem lehet mindegyik facet -et tetszleges típussal használni.

A pattern kulcsszó után reguláris kifejezéseket használunk a karaktersor típusú adatok szerkezetének a leírására. (lásd a W3C honlapján a használható reguláris kifejezéseket). példa: Értelmezzük a telefonszám típust, mely egy országon belüli telefonszámok szerkezetét adja meg : <xsd:simpletype name="telefonszám"> <xsd:restriction base="xsd:string"> <xsd:length value="10"/> <xsd:pattern value="\d{4}-\d{6}"/> </xsd:restriction> </xsd:simpletype>

példa: Egy könyv ISBN száma a következ formájú lehet: d-ddddd-ddd-d vagy d-ddd-ddddd-d vagy d-dd-dddddd-d, ahol d egy számjegyet jelöl A pattern facet segítségével tudjuk megadni a mintát, ahol \d számjegyet jelöl, illetve zárójelben a számjegyek számát. A három különböz lehetséges formáját az ISBN számnak három külön sorban vagy függleges vonallal elválasztva egymástól adjuk meg.

Tehát egy egyszer típus, mely az ISBN típust adja meg a következ: <xsd:simpletype name="isbntípus"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpletype> A mintát megadó három sort a következképpen is megadhatjuk: <xsd:pattern value= "\d{1}-\d{5}-\d{3}-\d{1} \d{1}-\d{3}-\d{5}-\d{1} \d{1}-\d{2}-\d{6}-\d{1}"/>

<?xml version="1.0"?> <xsd:schema xmlns:xsd=http://www.w3.org/2001/xmlschema targetnamespace="http://www.cs.ubbcluj.ro/bibl" xmlns="http://www.cs.ubbcluj.ro/bibl" elementformdefault="qualified"> <xsd:simpletype name="isbntípus"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> </xsd:restriction> </xsd:simpletype> <xsd:element name="bibliográfia"> <xsd:complextype> <xsd:sequence>

<xsd:element name="könyv" maxoccurs="unbounded"> <xsd:complextype> <xsd:sequence> <xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/> <xsd:element name="év" type="xsd:gyear"/> <xsd:element name="isbn" type="xsd:isbntípus"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:sequence> </xsd:complextype> </xsd:element>

</xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> Mikor használunk egyszer, illetve összetett típust? Az összetett típus akkor ajánlott, ha egy elemnek gyerek elemet és/vagy attribútumokat akarunk értelmezni. Egyszer típust definiálunk, ha az egy beépített típusnak a finomítása.

Attribútumok deklarálása: Egy összetett típusnak lehetnek attribútumai, az egyszernek nem. Az attribútumokat a gyerek elemek után adjuk meg és arra az elemre vonatkoznak, amelyikben bennefoglaltatnak. Általános formája az attribútum deklarálásának XMLSchema-ben: <xsd:attribute name="név" type="egyszer-típus" use="használat-módja" default/fixed="érték"/>

A használat módja lehetséges értékei: required optional prohibited egy attribútum lokális, ha egy elemen belül értelmezzük. csak a lokális attribútumoknak adhatjuk meg a használat módját. ezen kívül globális attribútumokat is deklarálhatunk, elemeken kívül, melyekre azután elem hivatkozhat.

példa: Egy egyszer példa attribútumokkat: <xsd:element name="foo"> <xsd:complextype> <xsd:sequence> </xsd:sequence> <xsd:attribute name="bar" /> <xsd:attribute name="boo" /> </xsd:complextype> </xsd:element>

példa: Egészítsük ki a példánkat DTD-ben úgy, hogy tartalmazzon attribútumokat is. <!ELEMENT bibliográfia (könyv+)> <!ELEMENT könyv (cím, szerz, év, ISBN, kiadó)> <!ATTLIST könyv Típus (önéletrajz tudományos regény) #REQUIRED VanRaktáron (igaz hamis) "hamis" Bíráló CDATA " "> <!ELEMENT cím (#PCDATA)> <!ELEMENT szerz (#PCDATA)> <!ELEMENT év (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT kiadó (#PCDATA)> A megfelel XML Schema a következ:

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace=http://www.cs.ubbcluj.ro/bibl xmlns=http://www.cs.ubbcluj.ro/bibl elementformdefault="qualified"> <xsd:element name="bibliográfia"> <xsd:complextype> <xsd:sequence> <xsd:element name="könyv" maxoccurs="unbounded"> <xsd:complextype> <xsd:sequence> <xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/>

<xsd:element name="év" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="típus" use="required"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="önéletrajz"/> <xsd:enumeration value="tudományos"/> <xsd:enumeration value="regény"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> <xsd:attribute name="vanraktáron"

type="xsd:boolean" default="false"/> <xsd:attribute name="bíráló" type="xsd:string" default=" "/> </xsd:complextype> </xsd:element> </xsd:sequence> </xsd:complextype> </xsd:element> </xsd:schema> az attribútumok a könyv elem attribútumai, ez a forma az ún. inline deklaráció. megadhatjuk hivatkozással is az attribútumokat, attribútum csoportot értelmezve <?xml version="1.0"?> <xsd:schema

xmlns:xsd=http://www.w3.org/2001/xmlschema targetnamespace=http://www.cs.ubbcluj.ro/bibl xmlns="http://www.cs.ubbcluj.ro/bibl" elementformdefault="qualified"> <xsd:element name="bibliográfia"> <xsd:complextype> <xsd:sequence> <xsd:element ref="könyv" minoccurs="1" maxoccurs="unbounded"/> </xsd:sequence> </xsd:complextype> </xsd:element> <xsd:element name="könyv"> <xsd:complextype> <xsd:sequence> <xsd:element ref="cím" minoccurs="1"/>

<xsd:element ref="szerz" minoccurs="1"/> <xsd:element ref="év" minoccurs="1"/> <xsd:element ref="isbn" minoccurs="1"/> <xsd:element ref="kiadó" minoccurs="1"/> </xsd:sequence> <xsd:attributegroup ref="bookattributes"/> </xsd:complextype> </xsd:element> <xsd:element name="cím" type="xsd:string"/> <xsd:element name="szerz" type="xsd:string"/> <xsd:element name="év" type="xsd:integer"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="kiadó" type="xsd:string"/> <xsd:attributegroup name="könyvtulajdonságok"> <xsd:attribute name="típus" use="required"> <xsd:simpletype>

<xsd:restriction base="xsd:string"> <xsd:enumeration value="önéletrajz"/> <xsd:enumeration value="tudományos"/> <xsd:enumeration value="regény"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> <xsd:attribute name="vanraktáron" type="xsd:boolean" default="false"/> <xsd:attribute name="bíráló" type="xsd:string" default=" "/> </xsd:attributegroup> </xsd:schema>

A példában egy másik formáját is láttuk az attribútum deklarálásának: <xsd:attribute name="név" use="használat-módja" default/fixed="value"> <xsd:simpletype> <xsd:restriction base="egyszer-típus"> <xsd:facet value="érték"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> Az XML Schema nagyon összetett, további részleteket lásd a http://www.w3.org/xml/schema