XSD - Υποδεικτήρες Σύνθετων Τύπων

Με τον δείκτη, μπορούμε να ελέγχουμε τον τρόπο χρήσης των στοιχείων στο έγγραφο.

Δείκτης

Υπάρχουν επτά δείκτες:

Δείκτης τάξης:

  • Όλα
  • Επιλογή
  • Σειρά

Δείκτης εμφάνισης εμφάνισης:

  • maxOccurs
  • minOccurs

Ομάδα δείκτη:

  • Ονομα ομάδας
  • attributeGroup name

Ο δείκτης Order

Ο δείκτης Order χρησιμοποιείται για να καθορίσει τη σειρά των στοιχείων.

Ο δείκτης All

<all> ο δείκτης καθορίζει την εμφάνιση των υποστοιχείων σε οποιαδήποτε σειρά και κάθε υποστοιχείο πρέπει να εμφανίζεται μόνο μια φορά:

<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>

Αναφορά:Όταν χρησιμοποιείτε τον δείκτη <all>, μπορείτε να ρυθμίσετε τον <minOccurs> σε 0 ή 1, ενώ ο δείκτης <maxOccurs> μπορεί να ρυθμιστεί μόνο σε 1 (θα εξηγήσουμε τον <minOccurs> και τον <maxOccurs> αργότερα).

Ο δείκτης Choice

<choice> ο δείκτης καθορίζει την εμφάνιση ενός υποστοιχείου ή την εμφάνιση ενός άλλου υποστοιχείου (ή ένα ή το άλλο):

<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>

Συμβουλή:Για να ρυθμίσετε την αόριστη συχνότητα εμφάνισης των υποστοιχείων, ρυθμίστε το <maxOccurs> (θα εξηγήσουμε αργότερα) σε unbounded (απεριόριστο).

Ο δείκτης Sequence

<sequence> καθορίζει την υποχρεωτική σειρά εμφάνισης των υποστοιχείων:

<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>

Ο δείκτης Occurrence

Ο δείκτης Occurrence χρησιμοποιείται για να καθορίσει την συχνότητα εμφάνισης ενός στοιχείου.

Αναφορά:Για όλους τους δείκτες "Order" και "Group" (any, all, choice, sequence, ονομασία ομάδας και αναφορά ομάδας), οι τυπικοί όροι του maxOccurs και του minOccurs είναι 1.

Ο δείκτης maxOccurs

<maxOccurs> ο δείκτης καθορίζει τον μέγιστο αριθμό εμφανίσεων ενός στοιχείου:

<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>

Ο παρακάτω παράδειγμα δείχνει ότι το υποστοιχείο "child_name" μπορεί να εμφανίζεται στο στοιχείο "person" τουλάχιστον μια φορά (όπου ο τυπικός όρος του minOccurs είναι 1) και τουλάχιστον 10 φορές.

Ο δείκτης minOccurs

<minOccurs> ο δείκτης καθορίζει τον ελάχιστο αριθμό εμφανίσεων ενός στοιχείου:

<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>

Ο παρακάτω παράδειγμα δείχνει ότι το υποστοιχείο "child_name" μπορεί να εμφανίζεται στο στοιχείο "person" τουλάχιστον 0 φορές και τουλάχιστον 10 φορές.

Συμβουλή:Για να μην περιοριστεί ο αριθμός των εμφανίσεων ενός στοιχείου, χρησιμοποιήστε τη δήλωση maxOccurs="unbounded":

Ένας πραγματικός παράδειγμα:

Το αρχείο XML με το όνομα "Myfamily.xml":

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>David Smith</full_name>
<child_name>Jogn</child_name>
<child_name>mike</child_name>
<child_name>kyle</child_name>
<child_name>mary</child_name>
</person>
<person>
<full_name>Michael Smith</full_name>
</person>
</persons>

Το παραπάνω αρχείο XML περιέχει μια ρίζα με το όνομα "persons". Σε αυτή την ρίζα, ορίσαμε τρεις στοιχεία "person". Κάθε στοιχείο "person" πρέπει να περιέχει ένα στοιχείο "full_name" και μπορεί να περιέχει μέχρι 5 στοιχεία "child_name".

Αυτό το αρχείο schema "family.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>

Ο δείκτης Group

Ο δείκτης Group χρησιμοποιείται για τη σύνδεση των στοιχείων των αριθμητικών ομαδών.

Ομάδα στοιχείων

Η ομάδα στοιχείων ορίζεται μέσω της δήλωσης group:

<xs:group name="组名称">
  ...
</xs:group>

Πρέπει να ορίσετε έναν all, choice ή sequence στο εσωτερικό της δήλωσης group. Ο παρακάτω παράδειγμα ορίζει το group με το όνομα "persongroup", ορίζοντας ένα σύνολο στοιχείων που πρέπει να εμφανίζονται ακριβώς στην καθορισμένη σειρά:

<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>

Μόλις ολοκληρώσετε τη διαδικασία ορισμού του group, μπορείτε να αναφέρετε αυτήν σε άλλο ορισμό:

<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>

Ομάδα αtribute

Η ομάδα αtribute ορίζεται μέσω της δήλωσης attributeGroup:

<xs:attributeGroup name="组名称">
  ...
</xs:attributeGroup>

Ο παρακάτω παράδειγμα ορίζει μια ομάδα αtribute με το όνομα "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>

Στην περίπτωση που έχετε ολοκληρώσει τη διαδικασία ορισμού της ομάδας αtribute, μπορείτε να αναφέρετε αυτήν σε άλλη ορισμό, όπως ακολουθεί:

<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>