Manuel PHP
Précédent |  | Suivant

# CXXXII. Fonctions de Service d'Accès de Données SDO XML

# Introduction

Avertissement
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez ce module à vos risques et périls.

Afin d'utiliser le Service d'Accès de Données XML pour les Objets de Service de Données, vous aurez besoin de comprendre certains concepts derrière le SDO : les graphiques de données, les objets de données, XPath et ses expressions, et ainsi de suite. Si vous n'êtes pas familier avec ces idées, vous devriez jeter un oeil sur la section sur SDO.

Le travail de XML DAS est de déplacer les données entre l'application et un fichier source XML, qui peut être soit un fichier ou une adresse URL. Afin de faire cela, l'emplacement du schéma XML doit être spécifié, qui est passé par un paramètre de la méthode de création du XML DAS. Le schéma est utilisé pour assuré les conformités du fichier XML qui sera écrit et aussi pour s'assurer que les modifications faites à un SDO provenant d'un XML suivent le modèle décrit par le schéma XML.

# Pré-requis

Le Service d'Accès de Données requiert PHP 5.1 ou supérieur. Il est fonctionnel avec l'extension SDO et requiert que SDO soit installée. Voyez les instructions d'installation SDO pour plus de détails sur comment faire cela.

# Installation

Le Service d'Accès de Données et empaqueté et installé avec l'extension SDO. Référez-vous à instructions d'installation SDO.

# Limitations

Les spécifications SDO 2.0 définissent la concordance entre les types XML et les types SDO. Avec Java SDO, la concordance est implémentée par le XMLHelper. Avec SDO pour PHP, cette concordance est implémentée par les Services d'Accès de Données XML. Le XML DAS implémente la concordance décrite dans les spécifications SDO 2.0 avec les restrictions suivantes :

Types Simples XML

1. Type Simple avec abstract="true" - aucun support PHP pour ces types abstraits SDO.

2. Type Simple avec sdoJava:instanceClass - aucun équivalent PHP n'est fourni.

3. Type Simple avec sdoJava:extendedInstanceClass - aucun équivalent PHP n'est fourni.

4. Type Simple avec une liste de itemType.

5. Type Simple avec union.

Types Complex XML

1. Type Complex avec abstract="true" - aucun support PHP pour ces types abstraits SDO.

2. Type Complex avec sdo:aliasName - aucun support PHP pour ces types d'alias SDO.

3. Type Complex avec contenu ouvert - aucun support PHP pour ces types ouverts SDO.

4. Type Complex avec attribut ouvert - aucun support PHP pour ces types ouverts SDO.

Attribut XSD

1. Attribut avec sdo:aliasName - aucun support PHP pour ces propriétés d'alias SDO.

2. Attribut avec valeur par défaut - aucun support PHP pour ces propriétés de valeurs par défaut SDO.

3. Attribut avec valeur fixe - aucun support PHP pour ces propriétés à lecture seule ou valeurs par défaut.

4. Référence Attribut.

5. Attribut avec sdo:string - aucun support pour sdo:string="true".

6. Attribut référençant un DataObject avec sdo:propertyType - aucune support pour sdo:propertyType="...".

7. Attribut avec une propriété bidirectionnelle à un DataObject avec sdo:oppositeProperty et sdo:propertyType - aucun support PHP pour opposé SDO.

Éléments XSD

1. Élément avec sdo:aliasName - aucune support PHP pour cette propriété d'alias.

2. Référence d'élément.

3. Élément avec nillable.

4. Élément avec groupe de substitution.

Éléments XSD avec Type Simple

1. Élément de type SimpleType avec valeur par défaut - aucun support PHP pour les valeurs par défaut SDO.

2. Élément de type SimpleType avec valeur fixe - aucun support PHP pour les propriétés à lecture seule et valeur par défaut.

3. Élément de type SimpleType avec sdo:string - aucun support pour sdo:string="true".

4. Élément référançant un DataObject avec sdo:propertyType - aucun support pour sdo:propertyType="..."

5. Élément avec référence bidirectionnelle à un DataObject avec sdo:oppositeProperty et sdo:propertyType - aucun support PHP pour opposé SDO.

# Exemples

Les exemples suivant sont basés sur l'exemple de la lettre décrite dans la documentation SDO. Les exemples assument que le Schéma XML pour la lettre est contenu dans un fichier `lettre.xsd` et que l'instance de la lettre est dans le fichier `lettre.xml`. Ces deux fichiers sont reproduits ici :

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:lettre="http://lettreSchema"
      targetNamespace="http://lettreSchema">
      <xsd:element name="lettres" type="lettre:FormLettre"/>
      <xsd:complexType name="FormLettre" mixed="true">
        <xsd:sequence>
          <xsd:element name="date" minOccurs="0" type="xsd:string"/>
          <xsd:element name="prenom" minOccurs="0" type="xsd:string"/>
          <xsd:element name="nomFamille" minOccurs="0" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>

    <lettre:lettres xmlns:lettre="http://lettreSchema">
      <date>1er Mars 2005</date>
      Mutual of Omaha
      Wild Kingdom, USA
      Chère
      <prenom>Casy</prenom>
      <nomFamille>Crocodile</nomFamille>
      S'il vous plaît, achetez plus de requin imperméable.
      Votre prime est passée date.
    </lettre:lettres>

Exemple 1. Chargement, modification et sauvegarde d'un document XML

L'exemple suivant montre comment un document XML peut être chargé provenant d'un fichier, altéré et récrit.

`<?php
try {
$xmldas = SDO_DAS_XML::create("lettre.xsd");
$xdoc = $xmldas->loadFromFile("lettre.xml");
$do = $xdoc->getRootDataObject();
$do->date = "3 Septembre 2004";
$do->prenom = "Anantoju";
$do->nomFamille = "Madhu";
$xmldas->saveDocumentToFile($xdoc, "lettre-out.xml");
} catch (SDO_TypeNotFoundException $e) {
print("Le Type n'est pas défini dans le fichier xsd");
} catch (SDO_DAS_XML_ParserException $e) {
print("Problème lors de l'analyse");
}
?>`

Une instance du XML DAS est la première obtenue de la méthode SDO_DAS_XML::create() qui est une méthode statique de la classe SDO_DAS_XML. L'emplacement du xsd est passé en paramètre. Une fois que nous avons une instance de XML DAS initialisée avec un schéma donné, nous pouvons l'utiliser pour charger l'instance du document en utilisant la méthode loadFromFile(). Il y a aussi la méthode loadFromString() si vous voulez charger une instance de document XML provenant d'une chaîne de caractères. Si l'instance du document se charge correctement, un objet de type SDO_DAS_XML_Document sera retourné sur lequel vous pourrez appeler la méthode getRootDataObject() pour obtenir l'objet de données SDO qui est la racine de votre graphique de données SDO. Vous pouvez alors utiliser les opérations SDO pour changer le graphique SDO. Dans cet exemple, nous modifions les propriétés date, prenom et nomFamille. Ensuite, nous utilisons la méthode saveDocumentToFile() pour écrire les changements dans un fichier système.

Ceci écriera le texte suivant dans `lettre-out.xml`.

    <?xml version="1.0" encoding="UTF-8"?>
    <FormLettre xmlns="http://lettreSchema" xsi:type="FormLettre" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <date>3 Septembre 2004</date>
      Mutual of Omaha
      Wild Kingdom, USA
      Chère
      <prenom>Anantoju</prenom>
      <nomFamille>Madhu</nomFamille>
      S'il vous plaît, achetez plus de requin imperméable.
      Votre prime est passée date.
    </FormLettre>

    <?php
    try {
        $xmldas = SDO_DAS_XML::create("lettre.xsd");
        try {
            $lettre = $xmldas->createDataObject("http://lettreSchema", "FormLettre");
            $lettre_seq = $lettre->getSequence();
            $lettre_seq->insert("9 Avril 2005", NULL, 'date');
            $lettre_seq->insert("Acme Inc. ", NULL, NULL);
            $lettre_seq->insert("United Kingdom. ");
            $lettre_seq->insert("Chère", NULL, NULL);
            $lettre_seq->insert("Tarun", NULL, "prenom");
            $lettre_seq->insert("Nayaraaa", NULL, "nomFamille");
            $lettre->nomFamille = "Nayar";
            $lettre_seq->insert("Veuillez noter que votre numéro de commande ");
            $lettre_seq->insert(12345);
            $lettre_seq->insert(" a été assigné aujourd'hui. Merci de faire affaire avec nous.");
            print($xmldas->saveDataObjectToString($lettre, "http://lettreSchema", "FormLettre"));
        } catch (SDO_Exception $e) {
            print($e);
        }
    } catch (SDO_TypeNotFoundException $e) {
        print("Le Type n'est pas défini dans le fichier xsd");
    } catch (SDO_DAS_XML_ParserException $e) {
        print("Problème lors de l'analyse");
    }
    ?>

Ceci émettra l'affichage suivant (des sauts de lignes ont été insérés pour une meilleure lisibilité) :

    <?xml version="1.0" encoding="UTF-8"?>
    <FormLettre xmlns="http://lettreSchema" xsi:type="FormLettre"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <date>9 Avril 2005</date>
    Acme Inc. United Kingdom.
    Chère
    <prenom>Tarun</prenom>
    <nomFamille>Nayar</nomFamille>
    Veuillez noter que votre numéro de commande 12345 a été
    assigné aujourd'hui. Merci de faire affaire avec nous.
    </FormLettre>

Exemple 2. Fixer les propriétés d'un document XML

Ce troisième exemple vous montre comment utiliser la classe SDO_DAS_XML_Document. La classe SDO_DAS_XML_Document est fourni pour obtenir et fixer des propriétés de la déclaration XML comme la version, l'emplacement du schéma, l'encodage et ainsi de suite.

`<?php
try {
$xmldas = SDO_DAS_XML::create("lettre.xsd");
$xdoc = $xmldas->loadFromFile("lettre.xml");
print("L'encodage est : " . $xdoc->getEncoding() . "\n");
print("Version XML : " . $xdoc->getXMLVersion() . "\n");
$xdoc->setXMLVersion("1.1");
print($xmldas->saveDocumentToString($xdoc));
} catch (SDO_TypeNotFoundException $e) {
print("Le Type n'est pas défini dans le fichier xsd");
} catch (SDO_DAS_XML_ParserException $e) {
print("Problème lors de l'analyse");
}
?>`

Les trois premières lignes d'affichage affiche comment l'encodage et la version XML ont été obtenus du document, et comment la version XML a été fixée dans l'en-tête XML.

    L'encodage est : UTF-8
    Version XML : 1.0
    <?xml version="1.1" encoding="UTF-8"?>
    ...

# Classes pré-définies

Le XML DAS fournit trois classes. Le SDO_DAS_XML qui est la classe principale utilisée pour récupérer les données de la source XML et aussi utilisée pour récrire les données. La classe suivante est SDO_DAS_XML_Document, elle est vraiment utile pour récupérer/écrire les déclarations XML comme l'encodage, version, etc. La dernière classe est SDO_DAS_XML_ParserException qui sera émise pour n'importe quelle exception d'analyse lors du chargement du fichier xsd/xml.

## SDO_DAS_XML

Ceci est la classe principale de XML DAS qui est utilisée pour récupérer les données de la source XML et aussi utilisée pour récrire les données. Autres que les méthodes de chargement et de sauvegarde des fichiers XML, il y a aussi une méthode appelée createDataObject qui peut être utilisée pour créer un DataObject vide d'un type donné.

### Méthodes

- create Ceci est la seule méthode statique disponible dans la classe SDO_DAS_XML. Utilisée pour construire un objet SDO_DAS_XML.

- createDataObject Peut être utilisée pour créer le DataObject d'un type donné.

- loadFromFile Charge l'instance de document xml d'un fichier. Ce fichier peut être un fichier local ou il peut être sur un hôte distant.

- loadFromString Similaire à la méthode ci-dessus. Charge l'instance xml qui est disponible en tant qu'une chaîne de caractères.

- saveDataObjectToFile Sauvegarde un SDO_DataObject vers un fichier.

- saveDataObjectToString Sauvegarder un SDO_DataObject vers une chaîne de caractères.

- saveDocumentToFile Sauvegarder un SDO_DAS_XML_Document vers un fichier xml.

- saveDocumentToString Sauvegarder un SDO_DAS_XML_Document vers une chaîne de caractères.

## SDO_DAS_XML_Document

Cette classe peut être utilisée pour récupérer/fixer des déclarations XML comme l'encodage, l'emplacement du schéma, etc.

### Méthodes

- getEncoding Récupère l'encodage.

- getNoNamespaceSchemaLocation Récupère l'emplacement du schéma de l'espace de nom no.

- getRootDataObject Récupère le DataObject racine.

- getRootElementName Récupère le nom du DataObject racine.

- getRootElementURI Récupère le URI du DataObject racine.

- getSchemaLocation Récupère l'emplacement du schéma.

- getXMLDeclaration Récupère si la déclaration xml est fixée ou non.

- getXMLVersion Récupère la version xml.

- setEncoding Fixe l'encodage avec la valeur donnée.

- setNoNamespaceSchemaLocation Fixe l'emplacement du schéma de l'espace de nom no avec la valeur donnée.

- setSchemaLocation Fixe l'emplacement du schéma avec la valeur donnée.

- setXMLDeclaraion Pour fixer/détruire la déclaration xml.

- setXMLVersion Fixe la version xml avec la valeur donnée.

## SDO_DAS_XML_ParserException

Est une sous-classe de SDO_Exception. Émis pour n'importe quelle erreur d'analyse lors du chargement du fichier xsd/xml.

Précédent | Sommaire | Suivant
SDO_Sequence::move | Niveau supérieur | SDO_DAS_XML_Document::getEncoding