PROMPT Enregistrement du schema trains.xsd

BEGIN
  -- Delete the schema, if it already exists; otherwise, this produces an error.
  DBMS_XMLSCHEMA.deleteSchema('http://www.eisti.fr/schemas/trains.xsd',4);
END;
/


BEGIN
-- Register the schema
DBMS_XMLSCHEMA.registerSchema('http://www.eisti.fr/schemas/trains.xsd',
'<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!-- auteur : Matthias Colin
       version : 1.0 (14/05/2010)

       Schéma d une description XML de ligne de train
  -->

  <!-- élément racine pour représenter une ligne de train -->
  <xsd:element name="Ligne" type="tLigne"/>

  <xsd:complexType name="tLigne">
    <xsd:sequence>
      <xsd:element name="ListeGares" type="tListeGares"/>
      <xsd:element name="ListeTrains" type="tListeTrains"/>
	</xsd:sequence>
	<xsd:attribute name="nom" type="xsd:string" use="required" />
  </xsd:complexType>

  <!-- liste de gares -->
  <xsd:complexType name="tListeGares">
    <xsd:sequence>
      <xsd:element name="GareTerminus" type="tGare" minOccurs="2"
          maxOccurs="2" />
      <xsd:element name="Gare" type="tGare" minOccurs="0"
          maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <!-- liste de trains -->
  <xsd:complexType name="tListeTrains">
    <xsd:sequence>
      <xsd:element name="Train" type="tTrain" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <!-- un train (détails) -->
  <xsd:complexType name="tTrain">
    <xsd:sequence>
      <xsd:element name="Depart" type="tGareTerminus" />
      <xsd:element name="Destination" type="tGareTerminus" />
      <xsd:element name="Arret" type="tGareArret" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
	<xsd:attribute name="type" type="typeTrain" use="required" />
	<xsd:attribute name="num" type="xsd:int" use="required" />
  </xsd:complexType>

  <!-- type de train -->
  <xsd:simpleType name="typeTrain">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="TGV" />
      <xsd:enumeration value="TER" />
    </xsd:restriction>
  </xsd:simpleType>

  <!-- type description d une gare -->
  <xsd:complexType name="tGare">
	<xsd:attribute name="nom" type="xsd:string" use="required" />
  </xsd:complexType>

  <!-- type d une gare terminus pour un train particulier -->
  <xsd:complexType name="tGareTerminus">
	<xsd:attribute name="gare" type="xsd:string" use="required" />
	<xsd:attribute name="heure" type="xsd:time" use="required" />
  </xsd:complexType>

  <!-- type d une gare arrêt pour un train particulier -->
  <xsd:complexType name="tGareArret">
	<xsd:attribute name="gare" type="xsd:string" use="required" />
	<xsd:attribute name="arrivee" type="xsd:time" use="required" />
	<xsd:attribute name="depart" type="xsd:time" use="required" />
  </xsd:complexType>

</xsd:schema>
',
   TRUE, TRUE, FALSE);
END;
/

PROMPT Création de la table trains_tab pour enregistrer des trains en XML
PROMPT compatibles avec le schema trains.xsd

-- Create table to hold XML instance documents
DROP TABLE trains_tab;

CREATE TABLE trains_tab (id NUMBER, xmlcol XMLType) 
 XMLType COLUMN xmlcol
 XMLSCHEMA "http://www.eisti.fr/schemas/trains.xsd"
 ELEMENT "Ligne";
 
PROMPT insertion d'un train valide
PAUSE PRESS ENTER TO CONTINUE
 
 INSERT INTO trains_tab (id, xmlcol) values
 (1, XMLTYPE(
 '<?xml version="1.0" encoding="utf-8" ?>
<Ligne nom="Paris-Bordeaux">
  <ListeGares>
     <GareTerminus nom="Paris" />
     <GareTerminus nom="Bordeaux" />
     <Gare nom="Saint Pierre des Corps" />
     <Gare nom="Tours" />
     <Gare nom="Dangé" />
     <Gare nom="Châtellerault" />
     <Gare nom="Futuroscope" />
     <Gare nom="Poitiers" />
     <Gare nom="Angoulême" />
  </ListeGares>
  <ListeTrains>
    <Train num="8369" type="TGV">
      <Depart gare="Paris" heure="10:30:00" />
      <Destination gare="Bordeaux" heure="14:00:00" />
    </Train>
    <Train num="8325" type="TGV">
       <Depart gare="Paris" heure="06:00:00" />
       <Destination gare="Bordeaux" heure="10:00:00" />
       <Arret gare="Saint Pierre des Corps" arrivee="07:00:00" depart="07:03:00" />
       <Arret gare="Châtellerault" arrivee="07:23:00" depart="07:25:00" />
       <Arret gare="Poitiers" arrivee="07:45:00" depart="07:50:00" />
       <Arret gare="Angoulême" arrivee="08:45:00" depart="08:50:00" />
   </Train>
   <Train num="18145" type="TER">
      <Depart gare="Poitiers" heure="14:40:00" />
      <Destination gare="Tours" heure="15:45:00" />
      <Arret gare="Futuroscope" arrivee="14:50:00" depart="14:57:00" />
      <Arret gare="Châtellerault" arrivee="15:10:00" depart="15:12:00" />
      <Arret gare="Dangé" arrivee="15:25:00" depart="15:27:00" />
   </Train>
   <Train num="8145" type="TGV">
      <Depart gare="Poitiers" heure="11:30:00" />
      <Destination gare="Paris" heure="13:15:00" />
      <Arret gare="Châtellerault" arrivee="11:45:00" depart="11:47:00" />
      <Arret gare="Saint Piere des Corps" arrivee="12:05:00" depart="12:10:00" />
   </Train>
</ListeTrains>
</Ligne>'));

PROMPT insertion d'un train non valide
PAUSE PRESS ENTER TO CONTINUE

 INSERT INTO trains_tab (id, xmlcol) values
 (1, XMLTYPE(
 '<?xml version="1.0" encoding="utf-8" ?>
<Ligne nom="Paris-Bordeaux">
  <ListeGares>
     <GareFinale nom="Paris" />
     <GareTerminus nom="Bordeaux" />
     <Gare nom="Saint Pierre des Corps" />
     <Gare nom="Tours" />
     <Gare nom="Dangé" />
     <Gare nom="Châtellerault" />
     <Gare nom="Futuroscope" />
     <Gare nom="Poitiers" />
     <Gare nom="Angoulême" />
  </ListeGares>
  <ListeTrains>
    <Train num="8369" type="TGV">
      <Depart gare="Paris" heure="10:30:00" />
      <Destination gare="Bordeaux" heure="14:00:00" />
    </Train>
    <Train num="8325" type="TGV">
       <Depart gare="Paris" heure="06:00:00" />
       <Destination gare="Bordeaux" heure="10:00:00" />
       <Arret gare="Saint Pierre des Corps" arrivee="07:00:00" depart="07:03:00" />
       <Arret gare="Châtellerault" arrivee="07:23:00" depart="07:25:00" />
       <Arret gare="Poitiers" arrivee="07:45:00" depart="07:50:00" />
       <Arret gare="Angoulême" arrivee="08:45:00" depart="08:50:00" />
   </Train>
   <Train num="18145" type="TER">
      <Depart gare="Poitiers" heure="14:40:00" />
      <Destination gare="Tours" heure="15:45:00" />
      <Arret gare="Futuroscope" arrivee="14:50:00" depart="14:57:00" />
      <Arret gare="Châtellerault" arrivee="15:10:00" depart="15:12:00" />
      <Arret gare="Dangé" arrivee="15:25:00" depart="15:27:00" />
   </Train>
   <Train num="8145" type="TGV">
      <Depart gare="Poitiers" heure="11:30:00" />
      <Destination gare="Paris" heure="13:15:00" />
      <Arret gare="Châtellerault" arrivee="11:45:00" depart="11:47:00" />
      <Arret gare="Saint Piere des Corps" arrivee="12:05:00" depart="12:10:00" />
   </Train>
</ListeTrains>
</Ligne>'));


