IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Architecture Oracle : Les tables


précédentsommairesuivant

3. Les tables XML

Il est possible de stocker des données au format XML dans une table.

Pour cela, Oracle a créé un nouveau type : XMLType.

Ce type peut être utilisé dans les procédures PL/SQL comme paramètre, variable et valeur retour.
Il contient des méthodes qui permettent de manipuler son contenu.
Des fonctions permettent de créer, extraire et indexer ce type de données.

Les requêtes SQL peuvent être appliquées sur tout ou partie d'un document XML.


Ce type de données peut être stocké sous deux formes :

  • Dans une colonne de type LOB
  • Dans un objet structuré

Stockage dans une colonne de type LOB

Le document est stocké "tel quel" dans la colonne.
Les performances d'accès par les instructions du DML sont médiocres.
L'accès par les commandes SQL est limité.
Consomme plus d'espace.

Ce type de stockage est conseillé si vous souhaiter simplement stocker le document XML, sans mise à jour particulière.


Stockage dans un objet structuré

Certains caractères non significatifs ne sont pas stockés (saut de ligne, espaces de fin,etc.).
Les performances d'accès par les instructions du DML sont excellentes.
L'accès par les commandes SQL est satisfaisant.
Nécessite moins d'espace de stockage.

Ce type de stockage convient parfaitement à la manipulation de parties du document XML.


Exemple de création d'une table contenant une colonne de type XMLType :

 
Sélectionnez
CREATE TABLE doc_xml(
  identifiant NUMBER(5) PRIMARY KEY,
  Nom         VARCHAR2(64) NOY NULL,
  Doc_xml     XMLType )
  XMLType COLUMN Doc_xml
     STORE AS CLOB (
	   TABLESPACE tbs_lob
	   STORAGE (INITIAL 4096 NEXT 4096)
	   CHUNK 4096 NOCACHE NOLOGGING ) ;

Exemple de création d'une table de type XMLType (stockage dans une colonne CLOB) :

 
Sélectionnez
CREATE TABLE doc_xml2 OF XMLType ;

Exemple de création d'une table de type XMLType (stockage dans un objet relationnel) :

 
Sélectionnez
CREATE TABLE xwarehouses (
   warehouse_id    NUMBER,
   warehouse_spec  XMLTYPE)
   XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL
      XMLSCHEMA "http://www.oracle.com/xwarehouses.xsd"
      ELEMENT "Warehouse";

Changer les caractéristiques de stockage d'une colonne XMLType :

 
Sélectionnez
ALTER TABLE doc_xml
   MODIFY LOB (Doc_xml.XMLDATA)
   (STORAGE (NEXT 16K) CACHE) ;


Le schéma XML

Un schéma XML définit une classe de document XML.

Il permet de s'assurer que les données insérées dans les colonnes de type XMLType sont en adéquation avec ce schéma.


Si l'on observe le document XML suivant :

 
Sélectionnez
<?xml version="1.0"?>
          <purchaseOrder orderDate="1999-10-20">
                <shipTo country="US">
                     <name>Alice Smith</name>
                     <street>123 Maple Street</street>
                     <city>Mill Valley</city>
                     <state>CA</state>
                     <zip>90952</zip>
                 </shipTo>
                 <billTo country="US">
                     <name>Robert Smith</name>
                     <street>8 Oak Avenue</street>
                     <city>Old Town</city>
                     <state>PA</state>
                     <zip>95819</zip>
                 </billTo>
                 <comment>Hurry, my lawn is going wild!</comment>
                 <items>
                     <item partNum="872-AA">
                         <productName>Lawnmower</productName>
                         <quantity>1</quantity>
                         <USPrice>148.95</USPrice>
                         <comment>Confirm this is electric</comment>
                     </item>
                     <item partNum="926-AA">
                         <productName>Baby Monitor</productName>
                         <quantity>1</quantity>
                         <USPrice>39.98</USPrice>
                         <shipDate>1999-05-21</shipDate>
                     </item>
              </items>
</purchaseOrder>

Voici ce que doit spécifier le schéma afin que le document XML soit accepté dans la colonne de type XMLType :

 
Sélectionnez
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:annotation>
     <xsd:documentation xml:lang="en">
      Purchase order schema for Example.com.
      Copyright 2000 Example.com. All rights reserved.
     </xsd:documentation>
  </xsd:annotation>

<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

<xsd:element name="comment" type="xsd:string"/>

<xsd:complexType name="PurchaseOrderType">
 <xsd:sequence>
   <xsd:element name="shipTo" type="USAddress"/>
   <xsd:element name="billTo" type="USAddress"/>
   <xsd:element ref="comment" minOccurs="0"/>
   <xsd:element name="items"  type="Items"/>
 </xsd:sequence>
 <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

<xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name"   type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city"   type="xsd:string"/>
   <xsd:element name="state"  type="xsd:string"/>
   <xsd:element name="zip"    type="xsd:decimal"/>
 </xsd:sequence>
 <xsd:attribute name="country" type="xsd:NMTOKEN"fixed="US"/>
</xsd:complexType>

<xsd:complexType name="Items">
  <xsd:sequence>
   <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
    <xsd:complexType>
     <xsd:sequence>
       <xsd:element name="productName" type="xsd:string"/>
         <xsd:element name="quantity">
           <xsd:simpleType>
             <xsd:restriction base="xsd:positiveInteger">
               <xsd:maxExclusive value="100"/>
             </xsd:restriction>
           </xsd:simpleType>
          </xsd:element>
          <xsd:element name="USPrice"  type="xsd:decimal"/>
          <xsd:element ref="comment"   minOccurs="0"/>
          <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
        </xsd:sequence>
       <xsd:attribute name="partNum" type="SKU" use="required"/>
      </xsd:complexType>
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>

<!-- Stock Keeping Unit, a code for identifying products -->
<xsd:simpleType name="SKU">
   <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d{3}-[A-Z]{2}"/>
   </xsd:restriction>
</xsd:simpleType>
</xsd:schema>

La contrainte de schéma se spécifie au moment de la création de la table :

 
Sélectionnez
CREATE TABLE xwarehouses OF XMLTYPE
   XMLSCHEMA "http://www.w3.org/2001/XMLSchema"
   ELEMENT "Warehouse";




La documentation Oracle concernant l'utilisation des schémas XML est disponible à l'url suivante :
http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96620/appbsch.htm#621642


précédentsommairesuivant

Le guide Oracle par Orafrance, Helyos et SheikYerbouti