2010-08-08 6 views
1

Étant donné suit un fichier XML:schéma XML - validation complexe

<root> 
    <customers> 
    <customer name="CustomerA" orders="111,222" /> 
    </customers> 

    <orders> 
    <order ID="111"> 
     <description text="Some bananas ..." /> 
    </order> 

    <order ID="222"> 
     <desciption text="good coffee" /> 
    </order> 

    </orders> 

</root> 

Maintenant, je veux valider les commandes d'attribut sur l'élément client. Toutes les commandes sont sperated avec une virgule ... Donc, très simple.

Est-ce possible avec les fichiers de schémas?

Répondre

0

EDIT:

Je pense que ce que vous êtes après est quelque chose à peu près comme suit, bien que depuis celui-ci utilise ids cela signifie qu'ils doivent être uniques withing le docuement donc vous ne pouvez pas ahve un order.id et un client .id qui sont les mêmes - pas sûr s'il y a un moyen de contourner cela. vous pouvez aussi utiliser alternativement xsd:IDREFS pour le faire comme vous dans votre exemple courant d'origine, je pense, mais personnellement je l'aime mieux ainsi ...

<xsd:complexType name="Customer"> 
     <xsd:attribute name="customerId" type="xsd:ID" use="required"/> 
     <xsd:attribute name="name" type="xsd:string" use="required"/> 
    </xsd:complexType> 

    <xsd:complexType name="Order"> 
     <xsd:sequence> 
     <xsd:element name="text" type="xsd:string"/> 
     <xsd:attribute name="customerId" type="xsd:IDREF" use="required"/> 
     <xsd:attribute name="id" type="xsd:ID" use="required"/> 
     </xsd:sequence> 
    </xsd:complexType> 

    <xsd:element name="customers> 
     <xsd:sequence> 
      <xsd:element name="customer" type="CustomerType" /> 
     </xsd:sequence> 
    </xsd:element> 
    <xsd:element name="orders"> 
    <xsd:sequence> 
     <xsd:element name="order" type="OrderType" /> 
    </xsd:sequence> 
    </xsd:element> 

Si je devais vous que je ferais quelque chose comme:

<root> 
    <customers> 
    <customer id="unique-customer-id" name="CustomerA" /> 
    </customers> 
    <orders> 
    <order id="222" customerId="unique-customer-id" text="Some Bananas..." /> 
    </orders> 
</root> 

Vous pouvez créer un schéma pour vous assurer qu'un order.customerId correspond à un customer.id. Je pense que cela faciliterait grandement la recherche et la transformation. Bien sûr, vous pourriez le rendre encore plus facile si les commandes étaient juste des enfants du client, mais je suis sûr que vous devez avoir d'autres exigences qui rendent cela trop verbeux ou mal conseillé.

+0

Je pense que votre fragment de code fait la même chose que le mien. Mais la question est, comment valider cela. – Carnation

+0

Si fait mais d'une manière différente .. si je me souviens (et il a été un certain temps depuis que j'ai créé schéma ou xml utilisé pour beaucoup plus qu'un fichier de configuration) vous pouvez lier l'élément d'attribut pour être validé comme référence à un autre élément. – prodigitalson

+0

Pouvez-vous m'expliquer, comment puis-je ceci ou pouvez-vous poster un exemple? :) – Carnation