Follow Us on Twitter

XML DB Query

Mei 2005 - XML DB is benaderbaar via HTTP, FTP, WebDAV en via SQL en PL/SQL. In het Whitebook van maart 2005 is o.a. de toepassing van WebDAV beschreven en de zogenaamde "structured storage" behandeld waarmee het XML document op een hoger niveau toegankelijk kan worden gemaakt.

Dit Whitebook gaat dieper in op het benaderen van XML DB vanuit SQL en PL/SQL. Aan bod komen RESOURCE_VIEW, PATH_VIEW, XPath expressies en SQL/XML operators ten behoeve van selectie en datamanipulatie op XML documenten in de XML DB en XMLType tabellen.

RESOURCE_VIEW en PATH_VIEW

Documenten in XML DB kunnen ingedeeld worden 3 categorieën; geregistreerde XML documenten, niet geregistreerde XML documenten en documenten zonder XML formaat (ASCII documenten). Documenten zonder XML formaat en niet geregistreerde XML documenten worden opgeslagen in de XML DB repository onder de repository eigenaar. Wel geregistreerde XML documenten worden in tabellen van een andere applicatie eigenaar opgeslagen zoals dat staat gespecificeerd in het XML schema (zie ook het Whitebook van Maart 2005). In de RESOURCE_VIEW worden al deze documenten verzameld in één join. Deze view bevat de folder structuur en alle bestanden zoals ze ook te zien zijn in Windows Verkenner. Naast deze folderstructuur bevat de view ook de document inhoud zelf. PATH_VIEW bevat alleen de folderstructuur, dus zonder de document inhoud. Zoeken via PATH_VIEW is daardoor dan ook veel sneller.

Via de RESOURCE_VIEW zijn alle documenten te benaderen als volledig document, als CLOB XMLType. Maar veelal is men slechts geïnteresseerd in een klein fragment van het XML document en in fragmenten uit meer XML documenten tegelijk. Dus het is gewenst om SQL en XML functionaliteit op een efficiënte wijze bij elkaar te brengen. Door het XML schema van de XML documenten te registreren kan dat worden gerealiseerd.

XML en SQL

XML is een formaat dat gebruikt wordt voor het representeren van zowel gestructureerde als ongestructureerde data. XML brengt twee traditioneel gescheiden werelden bij elkaar, de wereld van data management en content management. SQL is daarentegen de vertrouwde opvraagtaal voor gestructureerde gegevens. SQL is ook de industrienorm voor het manipuleren en het beheren van gestructureerde gegevens.

SQL/XML is een uitbreiding op de SQL standaard. SQL/XML is een specificatie van nieuwe SQL mogelijkheden voor het beheren, opvragen, en manipuleren van XML gegevens vanuit een SQL context.

Parallel aan de ontwikkeling van SQL/XML is XQuery ontwikkeld. XQuery is ook ontworpen om in XML data te zoeken. SQL/XML is 4GL, terwijl XQuery via 3GL (dus meer procedureel) te werk gaat. Men zou kunnen zeggen, XQuery is voor XML wat SQL voor database tabellen is. XQuery vindt zijn toepassing dus ook buiten een database context. XQuery wordt veelal gebruikt om XML te transformeren naar XHTML (de XML opvolger van HTML), om informatie op te halen voor een Webservice of om in web documenten te zoeken naar relevante informatie. XQuery is momenteel (nog) geen W3C standaard (zoals XML), maar het is een zogenaamde working draft. Vooruitlopend op de verwachte W3C aanbeveling ondersteund Oracle Database 10g versie 2 al XQuery.

De rest van dit Whitebook zal niet verder ingaan op toepassingen van XQuery maar zoomt dieper in op SQL/XML. SQL/XML gebruikt voornamelijk XPath, dus voordat SQL/XML wordt toegelicht volgt een korte uitleg over XPath.

XPath

XPath is een belangrijk onderdeel van de W3C standaard XSLT, maar ook SQL/XML en XQuery zijn gebouwd op XPath expressies. XPath is een taal die wordt gebruikt om informatie in XML documenten te lokaliseren en bewerken. XPath gebruikt pad expressies om door elementen en attributen te navigeren in een XML document. Deze pad expressies lijken sterk op de directory structuren van een computer file systeem.

Enkele voorbeelden op basis van onderstaand XML bericht:

Pad expressie

Resultaat

/Project/Lid

Selecteert alle lid elementen die als kind van project voorkomen.

/Project/Lid[1]

Selecteert het eerste lid dat als kind van project voorkomt.

//Rol

Selecteert alle rol elementen ongeacht waar ze in het document staan.

/Project/*

Selecteert alle elementen die als kind van project voorkomen.

//Achternaam|//Voornaam

Selecteert alle achternaam en voornaam elementen die in het document staan.

/Project/ProjectNaam()

Selecteert de tekst van de projectnaam node.

/Project/Lid[Rol="Projectleider"]/Achternaam()

Selecteert de tekst van de achternaam waarbij de rol van het lid projectleider is.

SQL/XML

Met SQL/XML functies die op XPath zijn gebaseerd is het betrekkelijk eenvoudig om in een SQL statement op XML documenten te zoeken en delen uit de XML documenten te tonen. Zo levert de SQL functie "existsNode" een true of false op als het XML document een specifieke XPath bevat. Onderstaand voorbeeld geeft het aantal projecten waarbij minimaal één persoon met de rol tester meedoet.

SQL> select count(*) from project 
 where existsNode(object_value,'/Project/Lid[Rol="Tester"]')>=1;
 COUNT(*) 
 -------- 
         2 

De functie "extract" geeft de nodes die voldoen aan een XPath expressie. Het resultaat kan een compleet document zijn of een XML fragment. Daarentegen levert "extractValue" de waarde van de node (of het attribuut). Met "extractValue" kunnen alleen eindnodes (leaf nodes) worden opgehaald. In onderstaande voorbeelden staan er 3 XML Project instantie documenten in de project XMLType tabel:

SQL> select extract(object_value,'/Project/ProjectNaam') from project;

EXTRACT(OBJECT_VALUE,'/PROJECT/PROJECTNAAM') 
-------------------------------------------- 
<ProjectNaam>XML DB implementatie</ProjectNaam> 
<ProjectNaam>JHeadstart DEMO</ProjectNaam> 
<ProjectNaam>Open Source Frameworks</ProjectNaam>


SQL> select extractValue(object_value,'/Project/ProjectNaam') from project; 

EXTRACTVALUE(OBJECT_VALUE,'/PROJECT/PROJECTNAAM') 
------------------------------------------------ 
XML DB implementatie 
JHeadstart DEMO 
Open Source Frameworks 

XPath rewrite

XML DB converteert SQL statements met XPath expressies automatisch naar conventionele SQL statements, dit wordt XPath rewrite genoemd. Omdat in ons voorbeeld het XML schema is geregistreerd (de documenten worden opgeslagen als structured storage) wordt het tweede SQL statement automatisch herschreven naar:

SQL> select p.xmldata.projectnaam from project p;

Met dit herschreven statement kan de database optimizer de SQL op dezelfde manier verwerken als elk ander SQL statement. Met functies zoals updateXML, insertChildXML, deleteXML kan de XML data worden bewerkt, er kan een volledig XML document worden vervangen of slechts een bepaald onderdeel worden gewijzigd. Deze functies maken ook gebruik van XPath rewrite. Door XPath rewrite kan vervolgens een veel hogere verwerkingssnelheid worden behaald, omdat het niet nodig is om volledige DOM structuren met XML documenten in het geheugen op te bouwen.

Door XPath rewrite biedt XML DB de mogelijkheid om dezelfde tools toe te passen die ook worden toegepast op relationele applicaties. Voor performance optimalisatie kan bijvoorbeeld het explain plan statement worden gebruikt om executie plannen van de optimizer te analyseren. De mogelijkheid bestaat vervolgens indexen te gebruiken om de performance te verbeteren. Maar let op; XPath rewrite en het gebruik van indexen kan niet worden toegepast op unstructured storage.

Conclusie

XML DB biedt een ijzersterke combinatie van ondersteuning voor WebDAV, FTP en HTTP en daarnaast allerlei mogelijkheden voor XML Schema validatie, SQL/XML en XQuery. Daarbij opgeteld biedt XML DB ook vele uiteenlopende API’s voor onder andere voor XSLT, XSQL, XSU en DOM, niet alleen voor PL/SQL maar ook voor Java en C. Er kan dus geconcludeerd worden dat XML DB zeer geschikt is voor de meest uiteenlopende XML toepassingen, waarbij vele hoogstaande XML technologieën bij elkaar kunnen worden gebracht. Met XML DB kan een XML toepassing profiteren van de robuustheid en performance van een Oracle database zonder aan flexibiliteit te verliezen.

Referenties

 

Over de auteur
Bas van Hal heeft ruime ervaring als adviseur/consultant en heeft zich de afgelopen 7 jaar gespecialiseerd in software ontwikkeling met Oracle development tools. Hij houdt zich ondermeer bezig met Designer, Developer, iDevelopment Accelerators (Headstart), CDM, Oracle XML DB en de Oracle Database.

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.