Αντικατάσταση στοιχείων του XSD

通过 XML Schema,一个元素可对另一个元素进行替换。

元素替换

Ας δούμε ένα παράδειγμα: Οι χρήστες μας προέρχονται από τη Μεγάλη Βρετανία και τη Νορβηγία. Θέλουμε να έχουμε την ικανότητα να επιλέγουμε αν οι χρήστες θα χρησιμοποιούν τα στοιχεία των στοιχείων XML στη Νορβηγική ή την Αγγλική γλώσσα.

Για να λύσουμε αυτό το πρόβλημα, μπορούμε να ορίσουμε ένα substitutionGroupΠρώτα, δηλώνουμε το κύριο στοιχείο, και στη συνέχεια θα δηλώσουμε τα στοιχεία που μπορούν να αντικαταστήσουν το κύριο στοιχείο.

<xs:element name="name" type="xs:string"/>
<xs:element name="navn"> substitutionGroup="name"/>

Στο παραπάνω παράδειγμα, το στοιχείο "name" είναι το κύριο στοιχείο, ενώ το στοιχείο "navn" μπορεί να αντικαταστήσει το στοιχείο "name".

Δείτε ένα τμήμα μιας XML scheme:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

Ένα νόμιμο XML έγγραφο θα πρέπει να μοιάζει κάπως έτσι (με βάση το παραπάνω σχήμα):

<customer>
  <name>John Smith</name>
</customer>

ή κάπως έτσι:

<kunde>
  <navn>John Smith</navn>
</kunde>

Αποτροπή αντικατάστασης στοιχείων

Για να αποφύγετε την αντικατάσταση άλλων στοιχείων από ένα συγκεκριμένο στοιχείο, χρησιμοποιήστε την ιδιότητα block:

<xs:element name="name" type="xs:string"> block="substitution"/>

Δείτε ένα τμήμα μιας XML scheme:

<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>

Ένα νόμιμο XML έγγραφο θα πρέπει να μοιάζει κάπως έτσι (με βάση το παραπάνω σχήμα):

<customer>
  <name>John Smith</name>
</customer>

Αλλά το παρακάτω έγγραφο δεν είναι νόμιμο:

<kunde>
  <navn>John Smith</navn>
</kunde>

Χρήση του substitutionGroup

Ο τύπος του αντικαταστάσιμου στοιχείου πρέπει να είναι ο ίδιος με τον τύπο του πρωτεύοντος στοιχείου ή να προέρχεται από το πρωτεύον στοιχείο. Αν ο τύπος του αντικαταστάσιμου στοιχείου είναι ο ίδιος με τον τύπο του πρωτεύοντος στοιχείου, δεν χρειάζεται να καθοριστεί ο τύπος του αντικαταστάσιμου στοιχείου.

Όλα τα στοιχεία του substitutionGroup (πρωτεύον στοιχείο και αντικαταστάσιμο στοιχείο) πρέπει να δηλωθούν ως κοινοί στοιχεία, αλλιώς δεν θα λειτουργήσουν!

Τι είναι τα κοινοί στοιχεία (Global Elements);

Οι κοινοί στοιχεία είναι τα άμεσα υποστοιχεία του στοιχείου "schema"! Οι τοπικοί στοιχεία (Local elements) είναι τα στοιχεία που ενσωματώνονται σε άλλα στοιχεία.