Ciò che è consentito in ristretta XPaths (vincoli)?
-
30-09-2019 - |
Domanda
Ho bisogno di applicare i vincoli in un grande file XML, in questo modo:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
Ho bisogno ID di ciascun bookAuthor per riferirsi a un autore valido.
mi sto trovando il "XPath limitato" molto maldestra con cui lavorare, ma forse si affaccia qualcosa. Ho ragione di definire il vincolo in questo modo:
<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>
Funziona, ma il mio file è in realtà più nidificati, quindi diventa davvero disordinato. Inoltre devo scrivere un nuovo vincolo per "library / libro / coautore". Non c'è nulla di più elegante che posso fare? Non posso abbreviare il selettore?
Posso limitare l'applicazione del vincolo ( "bookauthor [@nameAlias]")?
Grazie in anticipo per il vostro aiuto.
Soluzione
ha trovato la risposta in "XML Schema" di O'Reilly. E 'ok per avere:
- percorsi relativi con elemento figlio
- namespace
- tutti gli elementi ( "*")
- qualsiasi elemento figlio ( ".//bookauthor" nel mio caso farà il trucco)
Non è ok per includere niente di eccezionale, come ad esempio:
- elemento genitore
- test ( "[@nameAlias]", così c'è modo di applicare vincolo solo ai nodi con un attributo nameAlias)
- percorsi assoluti
Spero che questo aiuti qualcuno inciampare sulla questione in seguito.