Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /data/web/virtuals/280515/virtual/www/templates/vasv304/functions.php on line 202

Article Index

Zanoření více značek - reference

Uvedneý příklad je velmi jednoduchý a v praxi zřejmě zřídka dosažitelný, jak tedy na vícenásobné vnoření v XSD? Máme dvě možnosti - první je tvořit vnořenou strukturu i v případě definičního souboru. U složitějších struktur se pak dostáváme do velmi nepřehledné situace. Druhá možnost je využít reference a značky definovat postupně - napřed v rámci struktury pouze odkaz a definice dané značky je pak až jako poslední na řadě. Upravme si soubor tak, jak aby nebyl zatím příliš složitý:

XML

<zpravy>
  <zprava>
    <od>Michal</od>
    <komu>Jan</komu>
    <predmet>Přednáška</predmet>
    <text>Vem to dnes prosím za mne.</text>
  </zprava>
</zpravy>

XSD

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="zpravy">
    <xs:complexType>
     <xs:sequence>
      <xs:element ref="zprava"/> <!-- odkaz na definici elementu zprava -->
     </xs:sequence>
    <xs:attribute name="id" use="required" type="xs:integer"/>
    </xs:complexType>
   </xs:element>


  <xs:element name="zprava"> <!-- definice elementu zprava -->
    <xs:complexType>
     <xs:sequence>
      <xs:element name="od" type="xs:string"/>
      <xs:element name="komu" type="xs:string"/>
      <xs:element name="predmet" type="xs:string"/>
      <xs:element name="text" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
</xs:schema>

Vnoření a definice přes referenci je vidět u elementu zpravy - kde v sekvenci je definici elementu zpravy přes odkaz - ref="zprava". Značka <zprava> je pak definována dále. Takto je možné použít XSD i na složité struktury a udržet soubor přehledný.

Tímto zápisem se vyhýbáme "uhýbání" kódu do pravé strany - zůstáváme v rozumných počte odsazení řádku. Zároveň máme kód přehlednější.