2013-01-08 20 views
7

Sto provando a progettare uno schema per la convalida di un formato xml già utilizzato in un'applicazione (non c'è molto spazio per riprogettare l'xml).utilizzando keyref nello schema xml per un attributo con un elenco di valori

Sto cercando di utilizzare gli elementi keyre keyref del dizionario dello schema xml per convalidare i vincoli di identità.

Un problema particolare è con il modo in cui i modelli xml uno a molti

<spaceships> 
    <spaceship guns="gun1 gun2 gun3"/> 
</spaceships> 
<guns> 
    <gun id="gun1"/> 
    <gun id="gun2"/> 
    <gun id="gun3"/> 
</guns> 

sono arrivato fino a questo paio di chiave/keyref nel mio schema

<xs:key name="gunKey"> 
    <xs:selector xpath="guns/gun" /> 
    <xs:field xpath="@id" /> 
</xs:key> 

<xs:keyref name="gunRef" refer="gunKey"> 
    <xs:selector xpath="spaceships/spaceship" /> 
    <xs:field xpath="@guns" /> 
</xs:keyref> 

Questo non convalida con xerces che protestano:

Chiave 'gunRef' con valore 'gun1 gun2 gun3' non trovata per il vincolo dell'identità dell'elemento.

Esiste comunque un modo per esprimere nello schema che il valore dell'elenco è un elenco di riferimenti separati da virgole a un'altra entità e ottenere comunque il vantaggio della convalida del vincolo di identità?

risposta

1

Ho paura, che non è possibile creare tale riferimento per attributo come guns="gun1 gun2 gun3" perché gun1 gun2 gun3 è la stringa semplice che non viene automaticamente divisa in 3 parti separate.

EDIT 1: Se vuole abbinare tali attributi, guardare a questo QA: XML schema; multiple from a list of valid attribute values

+0

Sì, ho undersand .... io anche se ci potrebbe essere qualche XPath magia che posso fare in entrambi elementi chiave o keyref per evitare di ridisegnare il formato xml ..... – artur

+0

Bene, @artur, quindi guarda questo QA: http://stackoverflow.com/questions/8688864/xml-schema-multiple-from-a-list-of- valid-attribute-values ​​ – Andremoniy

+1

la domanda a cui si è collegati è più sull'espressione della permutazione di pochi valori noti, ciò che sto trattando qui sono i controlli di identità, che non sono gli stessi. Devo verificare che ciascun elemento nell'elenco sia una chiave primaria su un determinato elemento del documento. Grazie però – artur