Posso esprimere le regole "può / non contenere" che si estendono su più livelli nello schema XML?

StackOverflow https://stackoverflow.com/questions/1025499

  •  06-07-2019
  •  | 
  •  

Domanda

Ho una gerarchia di oggetti che vengono trasmessi tramite XML. Le regole della gerarchia sono facili da esprimere nello schema XML affermando quale elemento può contenere quali elementi figlio. Un esempio semplificato dei dati XML sarebbe (i dati reali dell'oggetto sono contenuti negli attributi e omessi per brevità):

<root>
  <channel>
    <router>
      <message />
      <message />
      <message />
    </router>
    <router>
      <message />
      <message />
    </router>
  </channel>
  <channel></channel>
</root>

Ora vorrei introdurre " cartelle " ;, i. e. nodi che servono solo a strutturare lunghi elenchi di bambini per un uso più semplice. Se creo un elemento < folder > generico, non imporrei regole proprie, ma le erediterei dal successivo elemento non-cartella sull'albero.

Mi sembra di non poterlo esprimere in XSD, oppure posso?

Posso pensare ad alternative, come avere elementi di cartella specifici per ogni possibile regola (brutta), semplicemente ignorando le regole in XSD e applicandole nel codice (bene con me) o in qualche modo separando la gerarchia degli oggetti e i nodi intermedi nell'XML ( non sono sicuro di come). Apprezzerei anche i tuoi commenti su questo, se ne hai.

È stato utile?

Soluzione

Hai ragione sul fatto che ciò che vuoi non può essere espresso in XSD. Sarebbe possibile introdurre cartelle a livello singolo, anche se, o più in generale, cartelle a livello n, ma non quelle arbitrariamente ricorsive (dal momento che dovrebbero essere elementi globali, che quindi non saprebbero in cosa sono contenuti ).

È possibile esprimere un tale vincolo in Schematron ; a sua volta, sarebbe possibile incorporare il vincolo schematron in un elemento appinfo XSD. Il tuo validatore può o meno supportare Schematron incorporato in XSD.

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