SIP: XML cz.2: Jak wykonać plik .XML na podstawie .XSD?

Pliki .XSD (XML Schemat) są szablonem i de facto instrukcją do tworzenia plików .XML, a te są właściwymi plikami do przenoszenia informacji. Jak zatem czytać plik .XSD, aby przygotować plik .XML i ten wypełnić danymi?

Pliki .XSD powszechnie mają dość skomplikowaną strukturę, a do ich przeglądania i edycji służą mniej lub bardziej skomplikowane edytory. Żeby jednak zrozumieć istotę obu dokumentów spróbujemy „ręcznie” i „naocznie” powiązać oba dokumenty.

Rozpatrzmy przykład prostego schematu:

<?xml version=”1.0″?>
<xsd:schema>
<xsd:element name=”DOKUMENT„>
 <xsd:complexType>
  <xsd:sequence>
    <xsd:element name=”wstep”       type=”xsd:string”/>
    <xsd:element name=”rozwiniecie” type=”xsd:string”/>
    <xsd:element name=”zakonczenie” type=”xsd:string”/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>
</xsd:schema>

Jak widać dokument .XSD otwiera deklaracja <?xml version=”1.0″?> i nic dziwnego, bo jak wiadomo z poprzedniego wpisu .XSD jest pisane w języku .XML. W drugim wierszu występuje znacznik <schema> obowiązkowy dla pliku .XSD. On też zamyka dokument XML Schema. Znacznik xsd wyznacza przestrzeń nazw dla schematu – w schematach stosuje się też xs.

W kolejnym wierszu mamy obiekt – element o nazwie DOKUMENT, który jest elementem złożonym, złożoność ta zaczyna się znacznikiem <xsd:complexType> a kończy </xsd:complexType> i składa się z trzech obiektów elementów: wstep, rozwiniecie, zakończenie. Każdy z tych elementów jest typu string, czyli może zawierać tylko tekst. Znaczniki <xsd:sequence> i </xsd:sequence> oznaczają, iż elementy występujące pomiędzy tymi znacznikami muszą występować w określonej i stałej kolejności.

Jak zatem utworzyć plik .XML?

Zaczynamy od otwarcia pierwszego elementu DOKUMENT:

<?xml version=”1.0″?>
<DOKUMENT>

</DOKUMENT>

i jego zamknięcia, bo każdy element złożony musi być zamknięty.

Potem definiujemy, to co składa się na DOKUMENT:

<?xml version=”1.0″?>
<DOKUMENT>
<wstep></wstep>
<rozwiniecie></rozwiniecie>
<zakonczenie></zakonczenie>
</DOKUMENT>

… i wypełniamy danymi:

<?xml version=”1.0″?>
<DOKUMENT>
<wstep>Treść wstępu</wstep>
<rozwiniecie>Treść rozwinięcia</rozwiniecie>
<zakonczenie>Treść zakończenia</zakonczenie>
</DOKUMENT>

Proste?