กับ XML Schemas, องค์ประกอบหนึ่งสามารถใช้แทนองค์ประกอบอื่น
องค์ประกอบชดเชย
สมมติว่าเรามีผู้ใช้จากทั้งสองประเทศที่แตกต่างกัน: อังกฤษและนอร์เวย์ เราต้องการความสามารถในการให้ผู้ใช้เลือกได้ว่าเขาหรือเธอต้องการที่จะใช้ชื่อองค์ประกอบนอร์เวย์หรือในชื่อภาษาอังกฤษในองค์ประกอบเอกสาร XML
เพื่อแก้ปัญหานี้เราสามารถกำหนด substitutionGroup ใน schema ของ XML ครั้งแรกที่เราประกาศองค์ประกอบหัวแล้วเราประกาศองค์ประกอบอื่น ๆ ซึ่งระบุว่าพวกเขาจะทดแทนสำหรับองค์ประกอบหัว
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
ในตัวอย่างข้างต้น "name" องค์ประกอบเป็นองค์ประกอบหัวและ "navn" องค์ประกอบทดแทนสำหรับ "name"
มองไปที่ส่วนของคี XML นี้:
<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 ที่ถูกต้อง (according to the schema above) จะมีลักษณะเช่นนี้
<customer>
<name>John Smith</name>
</customer>
หรือเช่นนี้
<kunde>
<navn>John Smith</navn>
</kunde>
การปิดกั้นธาตุชดเชย
เพื่อป้องกันไม่ให้องค์ประกอบอื่น ๆ จากแทนองค์ประกอบที่ระบุให้ใช้ block แอตทริบิวต์:
<xs:element name="name" type="xs:string" block="substitution"/>
มองไปที่ส่วนของคี XML นี้:
<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 ที่ถูกต้อง (according to the schema above) ลักษณะเช่นนี้:
<customer>
<name>John Smith</name>
</customer>
แต่เรื่องนี้ไม่ถูกต้อง:
<kunde>
<navn>John Smith</navn>
</kunde>
ใช้ substitutionGroup
ประเภทขององค์ประกอบทดแทนต้องเป็นเช่นเดียวกับหรือมาจากชนิดขององค์ประกอบหัว ถ้าชนิดขององค์ประกอบทดแทนเป็นเช่นเดียวกับชนิดขององค์ประกอบหัวที่คุณจะไม่ต้องระบุชนิดขององค์ประกอบทดแทน
โปรดทราบว่าองค์ประกอบทั้งหมดใน substitutionGroup นี้ (องค์ประกอบหัวและองค์ประกอบทดแทน) ต้องได้รับการประกาศให้เป็นองค์ประกอบโลกมิฉะนั้นมันจะไม่ทำงาน!
สิ่งที่เป็นองค์ประกอบของโลก?
องค์ประกอบทั่วโลกเป็นองค์ประกอบที่มีเด็กทันที "schema" องค์ประกอบ! องค์ประกอบในท้องถิ่นเป็นองค์ประกอบที่ซ้อนอยู่ในองค์ประกอบอื่น ๆ