Question

Je dois appliquer des contraintes dans un grand fichier XML, comme ceci:

<library>
    <book>
        <bookAuthor ID="1" nameAlias="PeerBR jr"/>
    </book>
    <book>
        <bookAuthor ID="1"/>
    </book>
</library>
<authorCatalogue>
    <author ID="1" name="PeerBr"/>
</authorCatalogue>

J'ai besoin ID de chaque bookAuthor de se référer à un auteur valide.

Je trouve la « XPath restreint » très maladroite de travailler avec, mais peut-être donnant quelque chose. Ai-je raison de définir la contrainte de cette façon:

<xs:keyref name="bookAuthor" refer="author">
    <xs:selector xpath="library/book/bookauthor"/>
    <xs:field xpath="@ID"/>
</xs:keyref>        
<xs:key name="author">
    <xs:selector xpath="authorCatalogue/author"/>
    <xs:field xpath="@ID"/>
</xs:key>

Il fonctionne, mais mon dossier est en fait plus imbriqué, il devient vraiment désordre. De plus, je dois écrire une nouvelle contrainte pour « bibliothèque / livre / co-auteur ». Est-il rien de plus élégant que je peux faire? Je ne peux pas abrégez le sélecteur?

Puis-je limiter l'application de la contrainte ( "bookauthor [@nameAlias]")?

Merci d'avance pour votre aide.

Était-ce utile?

La solution

trouvé la réponse dans « schéma XML » O'Reilly. Il est autorisé à avoir:

  • chemins relatifs avec élément enfant
  • namespaces
  • tous les éléments ( "*")
  • tout élément enfant ( « de .//bookauthor » dans mon cas fera l'affaire)

Il est pas correct d'inclure fantaisie quoi que ce soit, par exemple:

  • élément parent
  • Tests ( "[@nameAlias]", donc aucun moyen d'appliquer la contrainte aux nœuds uniquement avec un attribut de nameAlias)
  • chemins absolus

Espérons que cela aide quelqu'un trébucher sur la question plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top