XML/XSD Estensione

Ciao,
mi è capitato di dover realizzare degli schemi XSD che potessero permettere l’aggiunta dinamica di tag. Il caso specifico era un elenco di periferiche presenti in un server dove ogni dispositivo aveva il proprio tag e dentro esso aveva la proprie caratteristiche.

Per ottenere ciò è utilizzabile il tag <xs:any>.


Aggiunta di “Qualunque dato” senza alcun controllo se non sintattico che i tag (se presenti) siano correttamente aperti e chiusi


Schema:

<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
<xs:element name=”computer”>
<xs:annotation>
<xs:documentation xml:lang=”it-IT”>Definizione di un computer</xs:documentation>
<xs:documentation xml:lang=”en-US”>Definition of a computer</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name=”keyboard” />
<xs:element name=”mouse” />
<xs:element name=”monitor” />
<xs:any namespace=”##any” processContents=”lax” minOccurs=”0″ maxOccurs=”unbounded”/>
</xs:sequence>
</xs:complexType>
</xs:element>

Esempio:

<computer>
<keyboard>105 keys</keyboard>
<mouse>3 button</mouse>
<monitor>vga</monitor>
  <joystic>
     <mytag1>
        data1
        <mytag2 myattr=”asd”>
            myValue
        </mytag2>
     </mytag1>
  </joystic>
</computer>

 


Aggiunta di un estensione basata su uno schema esterno “senza alcun controllo” se non sintattico che i tag (se presenti) siano correttamente aperti e chiusi. Il controllo rispetto lo schema esterno deve essere fatto con una attività ulteriore separata.

Schema:

<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
  <xs:complexType name=”myextraType”>
          <xs:sequence>
               <xs:any namespace=”##other” processContents=”lax” maxOccurs=”unbounded”/>
          </xs:sequence>
     </xs:complexType>
<xs:element name=”computer”>
<xs:annotation>
<xs:documentation xml:lang=”it-IT”>Definizione di un computer</xs:documentation>
<xs:documentation xml:lang=”en-US”>Definition of a computer</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name=”keyboard” />
<xs:element name=”mouse” />
<xs:element name=”monitor” />
<xs:element name=”myextra” type=”myextraType” minOccurs=”0″ maxOccurs=”unbounded”/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

 

Esempio:

<computer>
<keyboard>105 keys</keyboard>
<mouse>3 button</mouse>
<monitor>vga</monitor>
  <myextra xmlns:myExt=”http://personal.site/myExtensions.xsd”>
     <myExt:joystick>
        data1
        <myExt:mytag2 myattr=”asd”>
            myValue
        </myExt:mytag2>
     </myExt:joistick>
  </myextra>
</computer>

Lascia un commento