Ce qui est permis à accès restreint XPath (contraintes)?
-
30-09-2019 - |
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.
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.