Follow Us on Twitter

XML ondersteuning in de Oracle9i database

April 2003 - De vorige Whitebook van deze serie over XML ging over Oracle's XML Developers Toolkit (XDK). In deze Whitebook gaan we in op de XML ondersteuning in de Oracle9i database. We gaan eerst kort in op de XML functies in Oracle8i database en release 1 van de Oracle9i database. Daarna bespreken de nieuwe XML functies in release 2 van de ORacle9i database.

XML ondersteuning in Oracle8i

De XML ondersteuning van Oracle8i zit met name in de XML Developers Kit, die we in ons vorige Whitebook bespraken. De XDK biedt de mogelijkheid om XML berichten samen te stellen vanuit èn te ontvangen in de Oracle8i database. De interfaces die deze berichten samenstellen of ontleden dienen zelf met de XDK ontwikkeld te worden. De XDK bevat de class generators (voor het aanmaken van het XML bericht vanuit de database) en parsers (voor het ontleden van het XML bericht), zowel beschikbaar in PL/SQL als Java. Om XML vervolgens naar bijvoorbeeld XHTML om te zetten bevat de XDK een XSLT processor. Daarop voortbordurend bevat de XDK de zogenaamde XSQL servlet, waarmee XML, SQL en XSLT in de server worden gecombineerd om dynamisch web content te genereren.

XMLType in Oracle9i

Kijken we vervolgens naar de XML ondersteuning in de Oracle9i database dan zien we dat de XML Developers Kit verder ontwikkeld is, maar vooral dat er daadwerkelijke ondersteuning is gekomen voor het opslaan van XML documenten. In de Oracle9i database is hiervoor een nieuw XML datatype geïntroduceerd, genaamd XMLType.

In release 1 is het XMLType nog een binair datatype met een reguliere textindex. In release 2 kan er ook voor worden gekozen het XMLType te implementeren als een object-relationeel datatype, dat een veel betere performance geeft. Het binaire XMLType slaat het document exact op (inclusief  de spaties), terwijl het object-relationele XMLType gebruik maakt van DOM en de structuur en inhoud van het XML document dus daadwerkelijk interpreteert. Dit geeft direct een aantal voordelen boven het binaire XMLType, zoals bijv. sortering van de child elementen en attributen, onderscheid tussen elementen en attributen, ondersteuning van XML datatypes en XML constaints (bijv. facets) die niet door SQL worden ondersteund. Oracle doet dit door deze extra informatie op te slaan in verborgen kolommen, die middels SQL en Java API's benaderd kunnen worden.

De voor- en nadelen van de XMLType opslag mogelijkheden

Voordelen van binaire XMLType 
(met Text index)
Voordelen van object-relationele XMLType 
(met B-Tree index)

Flexibel bij schema wijzigingen

Het oorspronkelijke formaat blijft bewaard

Beperkte flexibileit bij schema wijzigingen (vergelijkbaar met de ALTER TABLE restricties)

Lege regels, onnodige spaties binnen tags, en formatering for niet-string datatypes wordt verwijderd

Goede DML performance

Alle bestaande SQL features (zoals constaints en indexes, etc) kunen worden gebruikt.

Het doel van de introductie van het XMLType is om opslag en manipulatie van XML documenten in de database mogelijk te maken, net zoals bijv. strings en integers in de database kunnen worden opgeslagen en gemanipuleerd. Tot voor kort moest een XML document of wel ontrafeld worden en de informatie opgeslagen worden in één of meer relationele tabellen, of het gehele XML document moest als CLOB in de database worden opgeslagen zonder dat daarna de informatie gestructureerd kan worden benaderd. Het XMLType combineert nu de (relationele) opslag van een XML document met een aantal XML specifieke methoden en functies. De methoden van het XMLType zijn gebaseerd op de standaarden van de W3C.

XML functies gebaseerd op XMLType

Het gebruik van het XMLType datatype in Oracle9i biedt een scala van XML functies, die we in het kader van deze Whitebook slechts kort kunnen aanstippen:

  • tabel en typedefinities kunnen automatisch aangemaakt worden op grond van een XML Schema
  • het is mogelijk om bepaalde delen van het XML document te wijzigen zonder het gehele document te herschrijven
  • Zoeken in het XML document met XPath expressies. Voor querydoeleinden op XML data implementeert Oracle XPath in twee opvraagmethoden: SQL/XML en XQuery. SQL/XML is een uitbreiding van SQL, waarbij XPath notaties gebruikt kunnen worden om door het XML document te navigeren. SQL/XML is gebaseerd op de SQL/XML standaard van de SQLX group.
  • aanmaken van XML indexes met behulp van XPath expressies (ten behoeve van XPath zoekacties)
  • het gebruiken van nieuwe XML operatoren zoals XMLTABLE, XMLELEMENT en SYS_XMLGEN ter vereenvoudiging van XML queries en het genereren van XML
  • XSLT (XSL Transformaties) kan gebruikt worden voor het transformeren van XML documenten
  • Lazy XML Load - de virtuele DOM structuur van XMLType wordt alleen geladen op verzoek
  • XML Views maken de fragmenten van de XML documenten inzichtelijk voor eenvoudige SQL operaties
  • Een Java Beans interface biedt een directe toegang tot de XML data

Het benaderen van XML documenten

Oracle9i kent een aantal nieuwe SQL operatoren om de informatie in XML documenten te benaderen, zoals UNDER_PATH(), PATH(), DEPTH(), EQUALS_PATH() en EXTRACT_VALUE(). Met deze functies kunnen we bijvoorbeeld heel gericht vanaf een bepaalde plaats in de XML structuur gaan zoeken, tot een bepaalde diepte, naar XML documenten met bepaalde eigenschappen of een bepaalde inhoud. UNDER_PATH() geeft TRUE voor elke gevonden instantie onder de aangegeven root folder (binnen een optioneel aan te geven diepte). PATH() en DEPTH() geven een relatieve padnaam en folder diepte voor ieder geselecteerde instantie. Met EXTRACT_VALUE() kan van een geselecteerd element de waarde worden opgevraagd.

XML Repository

De Oracle9i database kan gezien worden als een repository voor XML documenten, waarbij deze repository met behulp van een drietal protocollen kan worden benaderd. De eerste 2 protocollen kennen we al, maar de 3de, WebDAV biedt erg veel interessante mogelijkheden:

  • HTTP is het standaard protocol voor overdracht over TCP/IP netwerken van inter-, intra- en extranet gerelateerde documenten zoals pagina's van websites. HTTP is vooral bedoeld om content 'op te halen', en kan eigenlijk alleen met behulp van het zogenaamde 'POST' commando data versturen naar de HTTP Server.
  • FTP (File Transfer Protocol) wordt gebruikt om bestanden op te halen en te versturen. Er kan  bovendien vanaf de client genavigeerd worden door het filesysteem van de FTP Server, zodat op die wijze het juiste bestand gevonden kan worden.
  • WebDAV, een extensie van HTTP, en is te beschouwen als de opvolger van HTTP en FTP. WebDAV staat voor World Wide Web Distributed Authoring and Versioning. Het is de standaard van het Internet Engineering Task Force (IETF) die het in samenwerkingsverband bewerken van teksten en content mogelijk maakt en file management faciliteiten biedt voor gebruikers die onderling verbonden zijn via het internet. Steeds meer tools zijn dan ook WebDAV compliant. Gesteld kan worden dat WebDAV de leesmogelijkheden van HTTP uitbreidt met schrijfmogelijkheden. Hoe transparant WebDAV is voor eindgebruikers wordt het best geïllustreerd door de WebDAV mogelijkheden van bijvoorbeeld Microsoft 2000 en Windows XP. In de Explorer kunnen verschillende typen netwerk locaties (zoals FTP of WebDAV Servers) worden toegevoegd, waarna deze locaties als reguliere filesystemen gebruikt kunnen worden. Ook in de moderne Internet Explorer vind je ondersteuning voor WebDAV. Hiervoor is een node met de naam 'Web Folders' zichtbaar. In een dergelijke browser kan via deze node genavigeerd worden naar een WebDAV Server (bijvoorbeeld een Oracle9i XML database), en kan binnen de filestructuur van die server verder genavigeerd worden. Het WebDAV protocol biedt uitgebreide mogelijkheden voor versiebeheer op documenten, en het toekennen van rechten op deze documenten middels zogenaamde Access Control Lists (ACLs).
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.