XSD indikátory
Můžeme ovládat, JAK mají být prvky použity v dokumentech s indikátory.
Ukazatele
Existuje sedm indikátorů:
Indikátory objednávky:
- Všechno
- Výběr
- Sekvence
Indikátory výskytu:
- maxOccurs
- minOccurs
Indikátory skupiny:
- Skupinové jméno
- atribut Název skupiny
Ukazatele objednávky
Indikátory pořadí se používají k definování pořadí prvků.
Všechny indikátory
Indikátor <all> určuje, že podřízené prvky se mohou objevit v libovolném pořadí a že každý podřízený prvek se musí vyskytnout pouze jednou:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
Poznámka: Při použití indikátoru <all> můžete nastavit indikátor <minOccurs> na 0 nebo 1 a indikátor <maxOccurs> lze nastavit pouze na 1 (<minOccurs> a <maxOccurs> jsou popsány později).
Indikátor volby
Indikátor <choice> určuje, že se může vyskytnout jeden podřízený prvek nebo jiný:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
Indikátor sekvence
Indikátor <sequence> určuje, že podřízené prvky se musí objevit v určitém pořadí:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Indikátory výskytu
Indikátory výskytu se používají k definování toho, jak často se může prvek vyskytovat.
Poznámka: Pro všechny indikátory „Pořadí“ a „Skupina“ (libovolné, všechny, výběr, sekvence, název skupiny a odkaz na skupinu) je výchozí hodnota pro maxOccurs a minOccurs 1.
indikátor maxOccurs
Indikátor <maxOccurs> udává maximální počet výskytů prvku:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string" maxOccurs="10"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Výše uvedený příklad ukazuje, že prvek „child_name“ se může v prvku „person“ vyskytnout minimálně jednou (výchozí hodnota pro minOccurs je 1) a maximálně desetkrát.
Indikátor minOccurs
Indikátor <minOccurs> určuje minimální počet výskytů prvku:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Výše uvedený příklad ukazuje, že prvek "child_name" se může v prvku "person" vyskytovat minimálně nulakrát a maximálně desetkrát.
Tip: Chcete-li, aby se prvek objevil neomezeně mnohokrát, použijte příkaz maxOccurs="unbounded":
Pracovní příklad:
Soubor XML s názvem „Myfamily.xml“:
<?xml version="1.0" encoding="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
Výše uvedený soubor XML obsahuje kořenový prvek s názvem „persons“. Uvnitř tohoto kořenového prvku jsme definovali tři prvky „osoba“. Každý prvek "person" musí obsahovat prvek "full_name" a může obsahovat až pět prvků "child_name".
Zde je soubor schématu "family.xsd":
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="full_name" type="xs:string"/>
<xs:element name="child_name" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Skupinové indikátory
Skupinové indikátory se používají k definování souvisejících sad prvků.
Skupiny prvků
Skupiny prvků jsou definovány pomocí deklarace skupiny takto:
<xs:group name="groupname">
...
</xs:group>
V deklaraci skupiny musíte definovat element all, choice nebo sekvenční. Následující příklad definuje skupinu s názvem „persongroup“, která definuje skupinu prvků, které se musí vyskytovat v přesném pořadí:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
Poté, co jste definovali skupinu, můžete na ni odkazovat v jiné definici, například takto:
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
Skupiny atributů
Skupiny atributů jsou definovány pomocí deklarace atributGroup takto:
<xs:attributeGroup name="groupname">
...
</xs:attributeGroup>
Následující příklad definuje skupinu atributů s názvem „personattrgroup“:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
Poté, co jste definovali skupinu atributů, můžete na ni odkazovat v jiné definici, jako je tato:
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>