JAX-P
A Java API for XML Processing vagy JAXP egyike a Java XML programozási API-jának, amely biztosítja az XML dokumentumok validációjához és elemzéséhez szükséges képességeket.
Három alapvető elemzési interfész létezik:
- a Document Object Model elemzési interfész vagy DOM interfész
- a Simple API for XML elemzési interfész vagy SAX interfész
- a Streaming API for XML vagy StAX interfész ( JDK 6 része; külön jar elérhető a JDK 5-höz is)
Ezen elemzési interfészek mellett létezik egy másik API is, amely az XSLT interfészt biztosít az adat és strukturális transzformációkhoz az XML dokumentumokon.
A JAXP-t Java Community Process keretein belül fejlesztették ki a JSR 5 (JAXP 1.0) és JSR 63 (JAXP 1.1 és 1.2) alatt.
Java SE verzió Csomagolt JAXP verzió 1.4 1.1 1.5 1.3 1.6 1.4 1.6 1.4 1.7 1.4.5 1.7.40 1.5 1.8 1.6
2008. február 12-én a JAXP 1.3-as verziója elérte az életciklusa végét.
2010. szeptember 3-án kiadták a JAXP 1.4.4 verzióját.
DOM interfész
szerkesztésA DOM interfészt talán a legkönnyebb megérteni: elemzi az egész XML dokumentumot és elkészíti a dokumentum komplett reprezentációját a memóriában, felhasználva azokat az osztályokat, melyek modellezik azt a koncepciót, amely megtalálható a Document Object Model(DOM) Level 2 Core Specification-ban.
A DOM elemzőt DocumentBuilder
(dokumentum építő)-nek hívják, mivel felépíti a memóriában a Document
(dokumentum) reprezentációját. Ezt a dokumentum építőt (javax.xml.parsers.DocumentBuilder
) a
javax.xml.parsers.DocumentBuilderFactory
készíti el.
A DocumentBuilder
létrehoz egy org.w3c.dom.Document
példányt, ami egy fa struktúra és csomópontokkal reprezentálja az XML dokumentumot. Minden fa csomópont a struktúrában megvalósítja a org.w3c.dom.Node
interfészt. Sok különböző típusú fa csomópont létezik, attól függően, hogy az XML dokumentum rész éppen milyen adatot reprezentál.
A legfontosabb csomópont típusok a következők:
- elem csomópont: ennek lehetnek attribútumai
- szöveges csomópont: reprezentálja azt a szöveget, ami dokumentum elem kezdő és vég tag-jai között található.
Az org.w3c.dom
java csomag Javadoc dokumentációjában megtalálható a teljes lista a csomópont típusokról.
SAX interfész
szerkesztésA SAX parser-t SAXParser
reprezentálja, melyet a javax.xml.parsers.SAXParserFactory
hoz létre. A DOM parser-től eltérően, a SAX parser nem készíti el a memóriában az XML dokumentum reprezentációját, így gyorsabb és kevesebb memóriát is használ. E helyett, a SAX parser informálja az XML dokumentum struktúra klienseit callback hívásokkal, amelyeket, org.xml.sax.helpers.DefaultHandler
példányán egy metódus hívásával biztosít a parser számára. A dokumentum ilyen módon való elérését XML Streaming-nek hívjuk.
A DefaultHandler
osztály megvalósítja a ContentHandler
interfészt, és a ErrorHandler
interfészt, DTDHandler
interfészt, és az EntityResolver
interfészt.A legtöbb kliens számára az ContentHandler
interfészben definiált metódusok megvalósítása az érdekes, melyek akkor hívódnak meg, amikor a SAX értelmező észreveszi a megfelelő elemet az XML dokumentumban. Az interfész legfontosabb metódusai a következők:
startDocument()
ésendDocument()
metódusok meghívódnak az XML dokumentum feldolgozásának kezdeténél és végénél.startElement()
ésendElement()
metódusok meghívódnak az XML dokumentum elem feldolgozásának kezdeténél és végénél.characters()
metódus that meghívódik a szöveges adat tartalmakra, melyek az XML dokumentum elem kezdeti és vég tag-jai helyezkednek el.
A kliensek a DefaultHandler
egy leszármazott osztályát nyújtják, melyek felüldefiniálják a ezeket metódusokat és feldolgozzák az adatokat. Ezek tartalmazhatnak pl. adat tárolást adatbázisban vagy adat kiírást stream-ekre.
Az értelmező működése során, az értelmezőnek szüksége lehet külső dokumentumok elérésére. Lehetséges lokális gyorsítótárban tárolni a gyakran használt dokumentumokat XML Catalog segítségével.
Ezt 2000 májusában a Java 1.3-mal vezették be.[1]
StAX interfész
szerkesztésA StAX-t a DOM és a SAX interfész közti középútnak tervezték. Azaz a programozott belépési pont a kurzor, ami a dokumentumon belüli pontot reprezentálja. Az alkalmazás mozgatja kurzort előre, szükség szerint kiszedi az információt a parserből. Ez jelentősen különbözik egy eseményvezérelt API-tól - amilyen pl. a SAX -, amely adatot küld az alkalmazásnak és elvárja az alkalmazástól, hogy állapotát megőrizze az események közötti időben és amennyire szükséges nyomon kövesse a helyzetét a dokumentumon belül.
XSLT interfész
szerkesztésAz XML Stylesheet Language for Transformations (azaz XML transzformációs stíluslap nyelv), vagy XSLT segítségével az XML dokumentumok konvertálhatók más adatformátumokra. A JAXP interfészeket biztosít a javax.xml.transform
csomagban, mely biztosítja az alkalmazásoknak, hogy XSLT transzformációkat hívhassanak. Ezeket az interfészeket eredetileg TrAX (Transformation API for XML) névre keresztelték, és egy informális közreműködés eredményeként jött létre számos Java XSLT feldolgozó fejlesztője között.
Az interfészek főbb funkciói:
- "gyár" osztály, amely lehetővé teszi az alkalmazás számára, hogy dinamikusan választhasson rendelkezésre álló XSLT feldolgozók közül
- a "gyár" osztály egyes metódusaival készíteni lehet egy Template (sablon) objektumot, amely reprezentálja a stíluslapot lefordított formában. Ez egy szálbiztos objektum, amelyet ismételten lehet használni sorokban v. párhuzamosan is ugyanazt a stíluslapot alkalmazva több forrás dokumentumra (vagy ugyanarra a forrás dokumentumra különböző paraméterekkel).
- a sablon objektum metódusával készíteni lehet egy Transformer-t (transzformálót), amely reprezentálja a stíluslapot végrehajtható formában. Ez nem osztható meg szálak között, habár sorosan újrahasználható. A Transformer biztosít metódusokat a stíluslap paramétereinek beállításához, szerializációs opciókat (pl. a kimenetre vonatkozókat) továbbá metódusokat az aktuális futtatáshoz.
A Source (forrás) és a Result (eredmény) a két absztrakt interfész, amelyet a kiment és a bemenet transzformációk reprezentálására definiáltak. Ez nem hagyományos használata a Java interfészeknek - habár, nincs elvárás, hogy egy feldolgozó elfogadjon bármely osztályt, amely megvalósítja az interfészt - minden feldolgozó megválaszthatja mely típusú Source- és Result-ot készít elő a feldolgozáshoz. A gyakorlatban minden JAXP feldolgozó 3 fajta sztenderd forrást (DOMSource
, SAXSource
, StreamSource
), 3 fajta sztenderd eredményt (DOMResult
, SAXResult
, StreamResult
) támogat. Természetesen lehetséges más saját megvalósítás is.
Külső hivatkozások
szerkesztés- Sun JAXP termék leírása
- JAXP 1.4 Referencia Implementációja[halott link] (JAXP 1.4)
- JSR 63 (JAXP 1.1 and 1.2)
- JSR 5 (JAXP 1.0)
- Document Object Model(DOM) Level 2 Core Specification
- Példa programok, melyek a DOM-ot vagy SAX parser-t használják Oktatási anyag: XML feldolgozás java-s Xerces-sel
- Sun Java és XML API-k: Segítség v. káros?
- JAXP/TrAX Bevezetés az Apache XML-be
Jegyzetek
szerkesztés- ↑ Compare the Java 1.2.1 API index with the 1.3 index. The Java Specification Request (JSR) 5, XML Parsing Specification, was finalised on 21 March, 2000.
Fordítás
szerkesztésEz a szócikk részben vagy egészben a Java API for XML Processing című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.