2010-04-09 4 views
0

Je cherche à créer un document XSD qui permettrait de valider du code XML pour moi. Disons, par exemple, que les documents XML sont conçus pour décrire les livres:Question concernant la validation XML en utilisant XSD

<?xml version="1.0" encoding="UTF-8"?> 
<book> 
    <comment>Bob's very first book</comment> 
    <name>Bob's book</name> 
    <author>Bob</author> 
    <year>2009</year> 
    <publisher> 
     <name>Dan's book publishing enterprise</name> 
     <address>123 Fake St.</address> 
    </publisher> 
</book> 

Disons aussi que je ne me soucie vraiment de trois éléments - le nom, l'auteur et l'année. Ils sont obligatoires et doivent être validés par rapport au schéma. Je ne contrôle pas les fichiers XML que je reçois, donc l'ordre des éléments ne devrait pas avoir d'importance et tout élément supplémentaire doit être autorisé à passer par la validation XSD non cochée.

Suite à ces exigences, j'ai essayé de construire un schéma XSD qui serait capable de faire ce genre de validation, mais je ne peux pas le faire correctement. La contrainte que les éléments peuvent être définis dans n'importe quel ordre exclut l'indicateur sequence. Ce qui me reste est le all ou les indicateurs choice. all serait le choix évident, mais il ne me permet pas d'utiliser l'élément any.

J'ai aussi joué avec l'idée d'utiliser ceci:

<include schemaLocation="year.xsd"/> 
<include schemaLocation="name.xsd"/> 
<include schemaLocation="author.xsd"/> 
.... 
    <sequence> 
     <any processContents="lax" minOccurs="0" maxOccurs="unbounded" /> 
    </sequence> 

Alors que se trouve dans le fichier XML, année de nom et l'auteur seront validés, cela ne vérifie pas les éléments obligatoires - Je ne peux pas préciser que le année, l'auteur et le nom du livre sont tenus de réussir la validation.

Quelqu'un pourrait-il m'indiquer comment construire un document XSD qui validera un certain nombre d'éléments obligatoires non ordonnés et permettra toujours aux éléments non définis dans le fichier XML de passer la validation?

Merci!

Répondre

1

Je suis assez sûr que vous ne pouvez pas faire cela avec le schéma XML. Suggestions:

  • Préparez votre document pour validation avec XSLT.
  • Utilisez Schematron.
+0

Il semblerait que vous avez raison ... – Sevas