Was ist in Restricted XPaths (Constraints) erlaubt?
-
30-09-2019 - |
Frage
ich brauche Einschränkungen in einer großen XML-Datei anzuwenden, wie folgt aus:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
Ich brauche jeden IDs bookauthor auf einen gültigen Autor zu beziehen.
Ich bin die Suche nach dem „eingeschränkten XPath“ sehr ungeschickt an der Arbeit mit, aber vielleicht etwas übersehen. Habe ich Recht der Beschränkung auf diese Weise zu definieren:
<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>
Es funktioniert, aber meine Datei ist eigentlich mehr verschachtelte, so dass es wirklich chaotisch wird. Außerdem habe ich eine neue Einschränkung für „Bibliothek / Buch / Co-Autor“ schreiben. Gibt es nichts elegantere ich tun kann? Kann ich nicht den Wähler abkürzen?
Kann ich beschränken die Anwendung der Beschränkung ( "bookauthor [@nameAlias]")?
Vielen Dank im Voraus für Ihre Hilfe.
Lösung
Können Sie die Antwort in O'Reillys "XML-Schema". Es ist in Ordnung zu haben:
- relative Pfade mit Kind-Elemente
- Namespaces
- alle Elemente ( "*")
- jedes Kind-Element ( ".//bookauthor" in meinem Fall den Trick)
Es ist nicht in Ordnung, etwas Besonderes zu umfassen, wie zum Beispiel:
- Elternelement
- Tests ( "[@nameAlias]", so dass keine Möglichkeit Einschränkung gilt nur für Knoten mit einem nameAlias ??Attribute)
- absolute Pfade
Hope, das hilft später das Problem jemand über stolpern.