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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top