2010-11-17 18 views
2

Comment puis-je effectuer la validation/ou la validation dans un XSD? par exemple. dans le fragment XML suivant, si le action est A (ajouter), puis les attributs suivants et les éléments sont required:XSD: Syntaxe Soit/Ou

<Post postID="22793" action="A" ...> 
    <Transaction ...> 
     <Disposition ...> 
     <AccountInformation ... /> 
     <ThirdPartyInformation ... /> 
     </Disposition> 
     <IndividualInformation ... /> 
    </Transaction> 

    ... 
</Post> 

mais si l'action est D attributs puis ultérieurs, et les attributs, sont interdit ::

<Post postID="22793" action="D" /> 

C'est: si l'action est supprimer (D), puis les autres attributs de modifier

  • requis

à

  • interdit

et les éléments suivants passent de

minOccurences="1" maxOccurrences="unbounded" 

à

minOccurrences="0" maxOccurrences="0" 

Est-il possible d'utiliser XSD pour définir la structure xml?

Répondre

5

L'un des the big criticisms of XSD est son incapacité à

... fournissent pas d'installations d'affirmer que la valeur ou la présence d'un attribut dépend des valeurs ou de la présence d'autres attributs (soi-disant co-occurrence contraintes).

Il ne peut donc pas spécifier des contraintes comme celle que vous décrivez. Dans la plupart des cas, j'ai vu des projets utiliser XSLT pour valider leurs documents où XSD échoue. Cependant other Schema languages existent, et vous pouvez avoir plus de succès avec eux. J'ai entendu parler de certaines personnes passant à Relax NG pour diverses raisons.

+0

Excellent, merci. Fournir un lien vers d'autres ayant le même problème montre que a) ce que je fais n'est pas rare b) les autres veulent le faire c) ce n'est pas possible. Et c'est ** c ** qui est la réponse acceptée: pas possible. –

1

Dans XSD version 1.1 maintenant c'est possible.

XSD 1.1

orientations stratégiques du Groupe de travail pour les changements entre les versions 1.0 et 1.1 peut se résumer comme suit:

2.Support des contraintes de co-occurrence (ce qui entraînera certainement des ajouts à la Syntaxe de transfert XML, qui ne sera pas comprise par les processeurs 1.0)

Bien sûr, XPATH 2.0 est utilisé pour les assertions sur des types simples et complexes. Une nouvelle étiquette est définie à cet effet.

xs: Maintient

Un autre nouveau mécanisme utile est

composants de type alternatifs fournissent des associations entre booléennes conditions (comme des expressions XPath) et définitions de type. Ils sont utilisés dans l'affectation de type conditionnel.

xs: alternative

<xs:element name="title" type="xs:anyType"> 
    <xs:alternative test="@type='text'" type="xs:string"/> 
    <xs:alternative test="@type='html'" type="htmlContentType"/> 
    <xs:alternative test="@type='xhtml'" type="xhtmlContentType"/> 
    <xs:alternative test="@type" type="xs:error"/> 
    <xs:alternative type="xs:string"/> 
</xs:element> 

Vous pouvez en savoir plus en this