Tartalom
Az XML nyelv alapjait számos jegyzet és könyv tartalmazza, ezért itt erre részletesen nem térünk ki, csak a legfontosabb pontokat vesszük sorra. Szükséges ismernünk az XML dokumentumok alapvető szerkezetét és a meta-modellezés terén történő felhasználhatóságát. Ismernünk kell az XML köré szerveződő technológiákat és kiéreznünk, hogy egy adott kontextusban az XML magát a nyelvet jelenti vagy sokkal inkább a köré szerveződő technológiákkal együtt alkotott együttesét.
Ezek ismeretek áttekintésére itt most csak vázlatosan térünk ki, amit kezdjünk azzal, hogy melyek is az XML célkitűzései:
legyen egyszerűen használható a (webes)rendszerekben,
az alkalmazások széles körét támogassa,
legyen kompatibilis az SGML-el,
legyen egyszerű XML dokumentumokat feldolgozó programokat írni,
ember által is olvasható, világos szerkezetű dokumentumok legyenek,
legyen egyszerű XML dokumentumokat készíteni.
Természetesen ezek a célok nem csak úgy a vakvilágba jelentek meg, hanem számos - jelenleg is meglévő - probléma hívta életre. Ezek között szerepel a W3C (World Wide Web Consortium) által feltárt problémakör, mint például a dinamikusan növekvő tartalom és a vele szembe álló tartalomelérési módszerek, amelyek még mindig inkább a megjelenésre koncentrálnak mintsem magára a tartalomra. Ez teremtette meg a szükségességét egy új Web-nek, amely képes a tartalom megértésére, támogatva a hatékony információelérést. Ugyan már több, mint egy évtized telt el a Szemantikus Web ötletnének megfogalmazásától, sajnos még mindig nem lett egy széles körben elfogadott technológia. A lehetőség ott rejlik benne, de várni kell még a kiteljesedésére. Azonban a felfutását beárnyékolhatja a számítógépek teljesítmények egyre nagyobb mértékű növekedése, mert ez utat nyithat a nyers erővel történő keresés hosszas fennmaradására.
Hasonlóképp problematikus a tartalom mellett a szerkezet, a dokumentumok strukturális kezelése. Az XML itt is jelentős előrelépést nyújt, mert a nyolcvanas évek SGML (ISO)szabványa ugyan egy kötetlen nyelvtant biztosít, de az implementációja bonyolult és drága. Ezzel szemben az XML tekinthető az SGML egyszerűsítésének és ezáltal "olcsóbbá" tételének.
Amivel viszont nem szabad párhuzamot vonni az a HTML. Még ha oly hasonló is lehet egy HTML és egy XML dokumentum, óriási különbségek vannak közöttük. A HTML:
megjelenítésre koncentráló
nem bővíthető jelölésrendszer
laza (nem szabványos) szintaxiskezeléssel.
Ezzel szemben az XML:
szigorú szintaktikai ellenőrzéssel rendelkezik,
bővíthető,
tartalom-orientált jelölésrendszer.
Ezek után ha egy kicsit tágabban próbáljuk meg értelmezni mi is az XML, akkor a szimpla szöveges dokumentum formátumon kívül még megemlíthetjük, mint metanyelv, szabványcsalád és technológiaként is.
Dokumentum formátumként számos helyen találkozhatunk az XML-lel:
de facto: DOCX, PDF, RTF, …
de jure: HTML, SGML, XML, ODF, …
Láthatjuk, hogy akár szöveges, akár strukturált dokumentumok kialakíthatóak. Míg az előbbiek a megjelenítésre fókuszálnak (szövegszerkesztés és -megjelenítés), addig a strukturálisak a tartalomra, az információelérésre (-átvitelre és -tárolásra). Lássunk egy példát szöveges formátumra:
<section>
<head>A major section</head>
<subsection>
<head>A cute little section</head>
<paragraph>
<para>
<person>R. Buckminster Fuller</person>
once said,
<quote>When people learned to do <emphasis>more</emphasis> with
<emphasis>less</emphasis>, it was their lever to industrial success.
</quote>
</para>
</paragraph>
</subsection>
</section>
A példából kitűnhet, hogy a dokumentum ugyan rendelkezik bizonyos szerkezettel, de ahol maga a tartalom található ott már mellőz minden nemű strukturáltságot. Ezzel szemben azok a dokumentumok, melyek adatcserére jöttek létre, mindig rendelkeznek egy szigorú struktúrával, annak érdekében, hogy gépi úton is feldolgozhatóak legyenek. ( Azt azért jegyezzük meg a példával kapcsolatban, hogy egy elég erősen csupaszított verzióval találkoztunk, mert a valóságban még számos plusz információ is megjelenik az egyes elemek leíró részében.)
Az XML, mint metanyelv, felhasználható nyelvek definiálásra, melyet a címkekészlet (tag) és struktúra (szókincs és nyelvtan) határoz meg. Erre a két legyakoribb példa a Dokumentum Típus Deklaráció (DTD) és az XML Schema. Ezekről bővebben a következő fejezetben lesz szó.
Az XML, mint szabványcsalád, több szervezet által is jegyzett alapszabványokból épül fel. Ezek közül említés szintjén - a teljesség igénye nélkül - tekintsük az alábbiakat:
ISO/IEC JTC 1 által gondozott szabványok:
Standard Generalized Markup Language (SGML)
Document Schema Definition Languages (DSDL) - meghatározza a DTD és XML Schema-t
HyperText Markup Language (HTML)
Open Document Format for Office Applications (ODT) v1.0
Organization for the Advancement of Structured Information Standards (OASIS)
Business Centric-Methodology (BCM), a SOA alapjai
Universal Description Discovery and Integration (UDDI)
Web Services Business Process Execution Language (WS-BPEL)
Security Assertion Markup Language (SAML) - az LDAP leváltásra
DocBook - a formátum, amiben ez a jegyzet is készült
World Wide Web Consortium (W3C)
Extensible Markup Language (XML) (1998, 2004, 2008)
Resource Description Framework (RDF) (2004) - (HTML5 kapcsán tervezet a microformátumok RDF-re alakítására 2012-ben)
XML Namespaces (1999, 2004, 2009)
XML Schema (2001, 2004, 2012)
DOM (1998, 2000, 2004, 2008)
XML Path Language (XPath) (1999, 2007, 2010)
XSL Transformations (XSLT) (1999, 2007, 2010)
XHTML (2000, 2001, 2007, 2010)
XQuery: An XML Query Language (2007, 2010)
Az XML, mint technológia, sokféle alkalmazási területen nyújt eszközöket és módszereket a feladatok megoldásához. Technológia, mert tartalmaz szabványokat és termékeket strukturált dokumentumok készítésére, feldolgozására és megjelenítésére. A felhasználási területek magukban foglalják:
webes megjelenés (szerver és kliens oldali transzformációk)
adatcsere (formátum, transzformáció) – e-Business
szövegek reprezentációja és feldolgozása
szövegszerkesztők dokumentum formátuma (OpenOffice, MS Office)
Web 2.0
technikai dokumentációk nyelvezete
szoftverek konfigurálása (ant, maven)
felhasználói interfészek definiálása (XUL)
EU önéletrajzok készítése (Europass)
…
A lista alapján jól körvonalazódóan látható, hogy visszautal a korábban már látott dokumentum formátum és metanyelv mivoltára, ezeken felül pedig kapcsolódik hozzá a megjelenítéshez és transzformáláshoz is technológia, valamint nyelvi kötések a programozási nyelvekhez (pl. a JAXB a Java esetén). Mindezeken felül pedig nem szabad elfelejtetnünk, hogy a jegyzet alapjául szolgáló témakör is szerves részét képzi, azaz az XML dokumentumok tárolása és lekérdezése.
Mielőtt rákanyarodnánk a dokumentumok tárolásánál fontos szerepet játszó sémákra, fontos röviden áttekinteni, hogy az XML milyen megoldást nyújt az újrafelhasználhatóságra. Az XML az újrafelhasználhatóságot a névterek bevezetésével oldotta meg, ezzel teszi lehetővé a külső eszközök felhasználását és segít a névütközések elkerülésében, amely például különböző alkalmazások különböző XML dokumentumainak keveredése esetén fordulhat elő ha azonos elemneveket használnak. Ezt csak úgy lehet feloldani, ha egyértelműen meg tudjuk mondani, hogy melyik elem melyik dokumentum alapján kerül feldolgozásra és értelmezésre.
A névtér egy szintaktikai
mechanizmus, egy adott név különböző
környezetekben történő felhasználásának megkülönböztetésére szolgál. Lehetővé
teszi, hogy egyazon dokumentumban több jelölőnyelv elemeit is használni
lehessen. A névtér minősített
nevek végtelen halmaza, ahol minősített név alatt
< névtérnév , lokális név> párokat értünk (ahol a
névtérnév lehet üres is).
A névterek bevezetéséhez az XML szabvány az xmlns (XML Namespace)
rövidítést használja. Ez a speciális attribútum társítja a használni kívánt
névteret a megadott névtérnévhez. Majd a továbbiakban prefixként használva
érhetőek el a névtérben definiált elemek.
<?xml version="1.0" encoding="utf-8"?> <account:persons xmlns:account="http://example.org/schema"> <account:person name="Teszt Elek" age="23"> <account:favourite number="4" dish="Sultkrumpli"/> </account:person> <account:person name="Gipsz Jakab" age="54"> <account:favourite number="4" movie="Kalandozasok"/> </account:person> <account:person name="Hommer Tekla" age="41"/> </account:persons>
A névterek használata eléggé olvashatatlanná tudja tenni az ember számára a dokumentumot, ezért ha a későbbiekben használandó feldolgozó támogatja, akkor lehet használni alapértelmezett névtereket is. Alapértelmezett névtér esetén már nem kell prefixet használni, mert alapértelmezetten annak a névtérnek az elemei közé helyezi az elemet és minden alelemét:
<account xmlns="http://example.org/schema">
Egy XML dokumentumba alapértelmezett névtér használata alapvetően nélkülözhetővé teszi a prefixek használatát az egyes elemek esetén, így időt takaríthatunk meg.
Ellenben vannak hátulütői is. Elsőként tekintsük azt a szituációt, hogy mennyivel válik nehezebbé annak a megkeresése, hogy egy elem valójában melyik névtérbe is tartozik. Másodrészt, alapértelmezett névtér használata esetén a névtér csak az elemekre kerül alkalmazásra, az attribútumokra nem.
Az alapértelmezett névtér törlése
Az xmlns attribútumnak egy URI( Uniform Resource Identifier)
címet kell megadni. Minden elemnek ami a hierarchiában alatta áll, követnie kell
az adott névtér által meghatározott szerkezetet. Lehetőségünk van a prefix
törlésére a következő
módon:
<person xmlns:account="">
Névütközések elkerülése érdekében több névteret is használhatunk külön prefix-szel:
<?xml version="1.0" encoding="utf-8"?> <account:persons xmlns:information="http://example.org/information" xmlns:account="http://example.org/schema/person"> <account:person name="Teszt Elek" age="23"> <account:favourite number="4" dish="Sultkrumpli"/> <account:favouriteWebPage> <account:address>http://www.w3.org</account:address> </account:favouriteWebPage> <information:address> <information:city>Debrecen</information:city> <information:street>Kis utca</information:street> </information:address> </account:person> </account:persons>
Mindkettőben
van egy address típus, amely az account névtérben egy
egyszerű , míg a másik esetben egy komplex típust. Ha névtér nélkül használnánk
őket, akkor az XML feldolgozó nem tudná megkülönböztetni hogy ez a típus most
előfordulhat-e a megadott helyen, illetve érvényes adatot tartalmaz-e.