Limitare Elementi XML basato su un altro elemento via XSD
-
29-09-2019 - |
Domanda
Credo che questo abbia a che fare con keyref
, ma io non sono di sicuro, e sono davvero non sono sicuro che possa essere fatto a tutti.
Ad esempio, dire che ho myElement1 e myElement2. Se non ci sono myElement2 nel file XML, quindi myElement1 deve esistere, altrimenti è facoltativa.
C'è un modo per forzare questo tipo di convalida nel mio file XSD?
Soluzione
Domande simili è stato chiesto più volte .. in StackOverflow o qualsiasi blog tecnologici ..
, ma la risposta è sempre non è possibile ,
casi come:
(a) convalida Elemento a seconda del valore o la presenza di qualsiasi altro elemento / attributo
valore (b) convalida di un elemento a seconda del valore o la presenza di qualsiasi altro elemento / attributo
(C) convalida attributo seconda del valore o la presenza di qualsiasi altro elemento / attributo
(D) definizione degli elementi / attributi con lo stesso nome con diversi tipi / DataTypes sotto stesso ambito
(E) la convalida di elementi figlio sulla base del valore o la presenza di eventuali altri elementi / attributi
tutti i casi di cui sopra non sono possibili per raggiungere ..
, ma se è possibile implementare una cosa trasformazione .. allora si può ottenere aiuto. quello che voglio dire è "prima passare attraverso la trasformazione e modificare l'XML secondo il vostro requisito,
esempio :: se il campo particolare è previsto con un certo valore .. passare l'XML come è se la condizione è soddisfatta e non passano se non lo fa .. nel blocco successivo XSD sta per errori di convalidare e ovviamente fuori :) si può capire che manca il vostro convalida personalizzata ..
in ogni caso l'intenzione è quella di blocco o Passo il codice XML in base ai dati .. e questo è ciò che si sta facendo ..
Nota: Schematron è stato entrare in buone pratiche di recente! Ecco il tutorial: http://zvon.org/xxl/SchematronTutorial/General/contents. html
Altri suggerimenti
Quello che vorrei suggerire è quello di creare XSD per ogni casi definiti di seguito:
Casi come:
- Convalida Elemento seconda del valore o la presenza di qualsiasi altro elemento / attributo.
- valore di un elemento a seconda del valore o la presenza di qualsiasi altro elemento / attributo Convalida.
- attributo Convalida seconda del valore o la presenza di qualsiasi altro elemento / attributo.
- Ignorando elementi (casuale) / attributi dalla convalida non è permesso. (Voglio dire è l'utilizzo di ha delle restrizioni.)
- elementi / attributi omonimo aventi differenti DataTypes.
- Convalida elementi figlio sulla base del valore o la presenza di eventuali altri elementi / attributi.
e creare lì proprio XML per questo.