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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top