Follow Us on Twitter

XML Schema in de Oracle XML DB

Maart 2005 - XML DB wordt al vanaf Oracle 9i release 2 meegeleverd met de Oracle database. XML DB geeft toegevoegde waarde aan applicaties waarbij een deel of alle gegevens van de applicatie in het XML formaat worden gerepresenteerd. 

XML DB verenigt de eigenschappen van een relationele database met enkele essentiële eigenschappen van bestandssystemen. Het ondersteunt de opslag, de verwerking en het opvragen van XML gegevens. De toepassingsgebieden waarin XML DB typisch wordt gebruikt zijn B2B en A2A integratie, internet applicaties, content-management applicaties, messaging en web services.

In het Whitebook van april 2003 zijn de belangrijkste eigenschappen van XML DB beschreven. In dit Whitebook wordt aan de hand van een voorbeeld duidelijk gemaakt hoe XML DB een XML Schema gebruikt om XML bestanden toegankelijk te maken in een Oracle PL/SQL omgeving. Allereerst wordt beschreven hoe XML documenten via het WebDAV protocol in XML DB kunnen worden opgeslagen. Daarna wordt uitgelegd hoe deze XML documenten toegankelijk kunnen worden gemaakt via PL/SQL door het XML Schema te registreren in XML DB. Ten slotte wordt de informatie in het XML Schema verrijkt met specifieke XML DB kenmerken om de XML Schema registratie te verbeteren.

Toegang tot XML DB

Er zijn vier mogelijke ingangen om XML DB te benaderen:

  • HTTP;
  • FTP;
  • WebDAV;
  • rechtstreeks via de Oracle Database (SQL*net/JDBC).

HTTP en FTP zijn gangbare protocollen. WebDAV is minder bekend, het is een uitbreiding op HTTP. Je zou kunnen stellen dat WebDAV de leesmogelijkheden van HTTP uitbreidt met de schrijfmogelijkheden van FTP. Het WebDAV protocol biedt basisfunctionaliteit om als fileserver op het internet te fungeren. Met dit protocol kan XML DB dus uitstekend worden ingezet als repository voor tekstdocumenten. Veel moderne tools bieden ondersteuning voor WebDAV. Onderstaand schermafdruk toont de WebDAV ondersteuning van Windows Explorer. Te zien is dat er twee bestanden in de subdirectory /home/PJT/ van XML DB repository zijn opgeslagen.

Ook XMLSpy (van Altova) ondersteunt het WebDAV protocol. Onderstaande schermafdruk geeft de grafische representatie van het XML Schema Project.xsd dat in dit Whitebook als voorbeeld dient. Het getoonde XML Schema beschrijft de inhoud en structuur van het XML instantie document van het Project “XML DB implementatie”. Het Project bevat tevens een sequence van Lid waarbij in het voorbeeld vier projectleden zijn opgenomen.

XML Schema

XML Schema is een verbetering (en vervanger) van het Document Type Definition (DTD). Net zoals het DTD definieert een XML Schema het metamodel (of een klasse) van een XML document (de XML instantie). Een XML Schema wordt gebruikt om XML documenten te valideren tegen de gedefinieerde bouwstenen. XML DB gebruikt het XML Schema tevens om te definiëren hoe de inhoud van het XML document in de database moet worden opgeslagen. Als een bestand met XML inhoud wordt aangeboden aan XML DB, via bijvoorbeeld WebDAV of FTP, dan kan het document worden gevalideerd tegen het XML Schema. Daarna wordt het ontrafeld en opgeslagen in de aangewezen tabellen. Het XML schema moet daarvoor alleen maar zijn geregistreerd in XML DB.

Voor de opslag bestaat twee varianten;

  • unstructured storage
    De XML documenten zijn slechts te benaderen als complete documenten (CLOB).
  • structured storage
    XML DB genereert verschillende CREATE TYPE en CREATE TABLE statements. Deze variant gebuikt object types en gerelateerde object georiënteerde kenmerken zoals arrays met variabele lengte en geneste tabellen. Dit maakt de gegevens in de database op een hoger niveau georganiseerd en toegankelijk. Onder deze object laag worden de gegevens nog steeds opgeslagen in kolommen en tabellen, maar men is in staat om met de gegevens te werken als betekenisvolle entiteiten. In plaats van in kolommen en tabellen te denken bij een database query, kan men simpel het object Project selecteren.

XML Schema registratie

Als een XML Schema wordt geregistreerd in XML DB, worden automatisch een aantal database objecten gecreëerd. Als voorbeeld wordt onderstaand schema gehanteerd;

Na registratie van het XML Schema in XML zijn de volgende database objecten gecreëerd:
(hierbij staat ### overigens voor een door XML DB automatisch gegeneerd sequence nummer)

  • Tabel Project###_TAB;
    tabel met één kolom sys_nc_rowinfo$ van het datatype XMLType (met unique key).
  • Trigger Project2###_TAB$xd;
    trigger die zorgt dat XML DB repository up-to-date wordt gehouden bij delete of update van een record.
  • Object type Lid###_T;
    object type met attributen:
    SYS_XDBPD$ - Dit attribuut bevat een XML DB repository verwijzing naar alle informatie die niet in de overige attributen kan worden opgeslagen. Voorbeelden hiervan zijn informatie over de volgorde, commentaren, proces instructies en namespace prefixes.
    Achternaam - VARCHAR2(4000)
    Voornaam - VARCHAR2(4000)
    Rol - object type met een opsomming (enumeration) uit XML DB repository
  • Collection type Lid###_COLL;
    collection type varray of Lid###_T
  • Object type ProjectType###_T;
    object type met attributen:
    SYS_XDBPD$
    Projectnaam - VARCHAR2(4000)
    Startdatum - DATE
    Einddatum - DATE
    Lid - collection type Lid###_COLL

Het nieuwe datatype XMLType wordt toegepast in de tabel. Dit datatype is geïntroduceerd om XML gegevens te kunnen vastleggen. XMLType kan net als elk ander datatype worden toegepast, dus als kolom van een tabel of view maar ook als argument in procedures.

Een voorbeeld met SQL:

SQL> select count(*) from "Project###_TAB"; 
SQL> 1 

In een volgend Whitebook zal het zoeken op een XMLType tabel gedetailleerder worden besproken.

XML DB attributen in het XML Schema

Het resultaat van de registreren van het XML Schema in XML DB is niet helemaal naar wens. XML DB gebruikt namelijk default namen en datatypes bij het genereren van de SQL objecten. Een vervelende bijkomstigheid is dat de SQL-objecten zo ook mixed case worden aangemaakt. Om controle te hebben over de naamgeving en structuur van de SQL objecten is het zaak om het XML Schema te verrijken met specifieke XML DB attributen. Tevens kan xs:maxLength (een standaard XML Schema constructie) worden gebruikt om de precisie van de kolommen te beïnvloeden.

Onderstaand wordt een fragment van het verrijkte XML Schema getoond. Eerst wordt XML DB namespace gedeclareerd, http://xmlns.oracle.com/xdb. Verder wordt in het XML Schema een aantal attributen gebruikt uit deze namespace gebruikt, zoals:

  • defaultTable
    de naam van de tabel waarin de XML documenten worden opgeslagen.
  • SQLType
    de naam van het Object Type dat voor het complexType moet worden gebruikt of de naam van het Oracle datatype. Overigens is in het onderstaande voorbeeld eigenlijk niet nodig het SQLType VARCHAR2 en DATE toe te voegen omdat deze door XML DB default aan elementen van het type resp. xs:string en xs:date worden gekoppeld.
  • SQLName
    de naam van het attribuut dat binnen het SQL type moet worden gebruikt.
  • SQLCollType
    de naam van de collection type voor complexType declaraties met maxOccurs > 1.

Onderstaand een (deel van) de aangepaste XML Schema.

Als het bovenstaand XML Schema wordt geregistreerd in XML DB dan levert dat de volgende SQL objecten op;

  • Tabel PROJECT
  • Trigger PROJECT$xd
  • Object type LIDTYPE; object type met attributen:
    SYS_XDBPD$
    ACHTERNAAM - VARCHAR2(30)
    VOORNAAM - VARCHAR2(30)
    ROL - object type met een opsomming (enumeration) uit XML DB repository
  • Collection type LIDCOLL;
    collection type varray of LIDTYPE
  • Object type PROJECTTYPE; object type met attributen:
    SYS_XDBPD$
    PROJECTNAAM - VARCHAR2(30)
    STARTDATUM - DATE
    EINDDATUM - DATE
    LID - collection type LIDCOLL

Een van de grote voordelen van de gestructureerde opslag in XML DB is de besparing van schijfruimte. De belangrijkste besparing volgt uit het feit dat tag-namen niet worden opgeslagen in het XML document. De tags maken namelijk deel uit van de metadata van het XML Schema. De tags worden gegenereerd als het XML document later wordt opgehaald.

Conclusie

Een XML Schema kan worden gebruikt om een XML Schema gegevensmodel/objectmodel in de database op te nemen. Daarmee is toegang gecreëerd om XML documenten te benaderen vanuit SQL terwijl het document tegelijkertijd toegankelijk blijft voor andere toepassingen zoals vanuit het bestandsysteem. Deze combinatie biedt aantrekkelijke mogelijkheden om enerzijds SQL operaties uit te voeren op XML gegevens en anderzijds XML operaties op SQL gegevens.

In een volgend Whitebook zal uitvoeriger worden ingegaan op deze combinatie van XML en SQL. Aan bod komen constraints, SQL/XML operators, XPath expressies, RESOURCE_VIEW en PATH_VIEW ten behoeve van selectie en datamanipulatie op XMLType tabellen.

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:
 
Tags:

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.