DOM XML September 06, 2010 08:08 about 1 year ago
En Java enterprice arkitekt spørger forsigtige om vi kan bruge JDOM som DOM parser? Ja da svare jeg men kommer til at tænke på at det må være minst 10 år siden jeg sidste gang svarede på samme spørgsmål
Når man udveksler stukturede dokumenter som fx HTML og XML kan data repræsenteres i et DOM træ datastruktur. DOM står for “Document Object Model” hvilken er en platform og sprog-uafhængige repræsentation af data. Data kan være alle forme for data der i sig selv udgør en træstruktur.
Et DOM træ løser kommunikation mellem parter der ikke er interproces forbundet. Altså kommunikation der skal serialiseres gennem en ledning. Formålet med en DOM repræsentation er at kunne læse og forstå strukret data på en dataorienteret måde uden at skulle løse sig på programmeringssprog eller hårde afhængigheder som systemresource eller teknikaliteter. Kommunikationen med data i DOM træet må kunne ske på et relativt højt niveau således at den forretningsmæssige betydning ikke går tabt eller bliver for fragmenteret.
Traditionelt findes der to former for metoder til parsing af DOM dokumenter:
- træbaseret – dokumentet læses ind i hukommelsen som en træstruktur
- eventbaseret – applikation registrer begivenheder som elementer
Et DOM træ indlæst i hukommelse giver mulighed for at besøge alle noder i tilfældig orden men tager meget hukommelse. Den enventbaseret metode kræver meget lidt hukommelse men læser typisk kun en node af gangen men langt hurtigere.
Der findes en lang række af sprog og biblioteker der er særdeles velegnede til paring af XML/HTML strukturerede data men Java og XML er som Bambi på den frosne sø. Siden 1999 har Java brugt tredie-parts software biblioteker til parsing af DOM objekter. Undervejs er der kommet et par nye landvendinger i form af syntakstisk sukker men ikke nogen revolution. Vor tids mange integrations opgaver kræver at et programmeringssprog kan arbejde direkte med XML data repræsentationer. Java er måske et af de sidste der ikke understøtter XML direkte på spog niveau og det er svært at finde en god, høj niveau DOM fortolker til Java.
Derfor handler dette om fravalg fremfor tilvalg!
- Language level XML support for Java 7 er netop afvist. Dette ville ellers have trukket Java 10 frem i tiden med mulighed for at tale med DOM på høj niveau.
- XQuery API for Java (XQJ) JSR 225. XQJ er SQL for XML. XQJ API deler mange højt niveau begreber fra JDBC som forbindelser og kilder. Denne løsning er sikker den mest tidsvarende hvis man skal fortolke en DOM repræsentation
- Xerces er en samling af software biblioteker for parsing, validering, fortolkning og miniplere XML. Java 5/6 bruger Apache Xerces som XML parser. Dog med ændrede package navne fordi mange tredie part biblioteker benytter samme parser.
- Java API for XML Processing, eller JAXP. Det giver mulighed for validering og parsing XML-dokumenter. JAXP understøtter streaming API StAX som er en del af JDK6.
- Apache Axiom er en letvægts XML objekt model baseret op StAX der understøtter lazy objekt kreation.
- Woodstox er en højtydende “namespace-aware” StAX-kompatibel (JSR-173) Open Source XML-processor skrevet i Java. XML-processor betyder, at den håndterer både input (parsing) og output (serialisering)), samt understøtter validering og andet.
Spørgsmålet lyder: Hvilken Java XML DOM parser skal man bruge? Evt. JDOM?
Man kan nemt bruge JDOM til at parse XML til DOM repræsentation hvorefter man kan arbejde på data. API’et hen meget Java like syntaks og er lidt mere høj niveau men er stadig kun sukker udenpå den oldgamle W3C DOM træ der har et seriøst memory foootprint.
Personligt mener jeg at det håbløst at bruge et API der har 10 år på bagen når Java 6 har implementeret StAX hvorpå der kan eksekveres ting som Woodstox! Når det gælder integrations opgaver vil jeg heller bruger andre sprog på JVM’en der har indbygget evnen til at tale XML.
By Frank Vilhelmsen - 2 tags: java dom - Add comment