2010-11-29 31 views
2

Le code XML suivant est validé par rapport au document xsd fourni. Cependant, quand je commence à supprimer des éléments comme du xml, il valide encore !?Comment puis-je spécifier une liste d'éléments enfants xml requis qui ne doivent pas être en séquence?

Comment écrire une xsd qui force l'inclusion d'éléments?

<?xml version="1.0" encoding="UTF-8"?> 
<Video> 
    <Title> 
    </Title> 
    <Description> 
    </Description> 
    <Contributor> 
    </Contributor> 
    <Subject> 
    </Subject> 
</Video> 

Ensuite, je dois le xsd:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="UploadXSD" 
    targetNamespace="http://tempuri.org/UploadXSD.xsd" 
    elementFormDefault="qualified" 
    xmlns="http://tempuri.org/UploadXSD.xsd" 
    xmlns:mstns="http://tempuri.org/UploadXSD.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="Video"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Title" minOccurs="1" type="xs:string"></xs:element> 
     <xs:element name="Description" minOccurs="1" type="xs:string"></xs:element> 
     <xs:element name="Contributor" minOccurs="1" type="xs:string"></xs:element> 
     <xs:element name="Subject" minOccurs="1" type="xs:string"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

Répondre

1

Votre targetNamespace dans le xsd doit correspondre à la espace de noms du xml que vous essayez de valider, à savoir

<Video xmlns="http://tempuri.org/UploadXSD.xsd"> 
    <Title> 
    </Title> 
    <Description> 
    </Description> 
    <Contributor> 
    </Contributor> 
    <Subject> 
    </Subject> 
</Video> 
+0

qui fonctionne grâce .... ce – Exitos

+0

est * un * des problèmes dans le code. Cependant, cela n'a rien à voir avec la question du titre. @Ryan Brunner a répondu à la question posée. Une séquence doit être en ordre. –

+0

Oui, mais c'est la raison pour laquelle les erreurs de validation attendues ne sont pas apparues. Je suis d'accord que la réponse de Ryan répond correctement à la question du titre, mais elle n'aborde pas le problème global mentionné dans le corps. – Keith

4

Si vous utilisez xs:all par opposition à xs:sequence, les éléments peuvent apparaître dans un ordre quelconque. Il y a quelques restrictions supplémentaires - par exemple, les éléments ne peuvent pas être spécifiés plusieurs fois en utilisant all (Je ne suis pas sûr si vous avez l'intention, votre schéma le permettrait actuellement.)