องค์ประกอบหลายอย่างมีหลายอย่างเหมือนกันใน xsd schema

หากฉันมีประเภทที่ซับซ้อนจำนวนมากใน xsd ซึ่งยกตัวอย่างมีฟิลด์ทั่วไปอยู่จำนวนหนึ่ง เช่น 'id' หรือ 'ชื่อ' หรือ 'วันที่' หรือ 'any specificId' ซึ่งหมายความว่าประเภทเหล่านั้นค่อนข้างคล้ายกับแต่ละประเภท อื่น ๆ และมันจะเป็นฝันร้ายที่จะเพิ่มฟิลด์ทั่วไปหนึ่งฟิลด์ให้กับแต่ละฟิลด์อีกครั้ง เป็นไปได้ไหมที่จะกำหนดประเภทพื้นฐานสำหรับประเภทที่ซับซ้อน เพื่อให้ประเภทที่ซับซ้อนนี้จะขยายฟิลด์/รายการประเภทพาเรนต์ฐาน ในกรณีนั้น ฉันแค่เพิ่มฟิลด์ใหม่นี้ลงในประเภทพื้นฐาน ไม่ใช่เพิ่มให้กับฟิลด์ย่อยแต่ละรายการ เป็นไปได้ไหม?


person javagirl    schedule 16.03.2012    source แหล่งที่มา
comment
ส่วนขยายไม่ใช่สิ่งที่ดีที่สุดเสมอไป หากคุณพบปัญหาที่เกี่ยวข้องกับข้อจำกัด การแปลสิ่งเหล่านั้นเป็นอ็อบเจ็กต์นั้นไม่สะอาด ดังนั้นการใช้โมเดลกลุ่ม (สำหรับองค์ประกอบ xsd:group และแอตทริบิวต์attributeGroup) จึงเป็นอีกทางเลือกหนึ่งที่คุณอาจต้องการพิจารณาเพื่อให้สามารถนำกลับมาใช้ใหม่ได้   -  person Petru Gardea    schedule 16.03.2012


คำตอบ (2)


แน่นอนคุณควรใช้ส่วนขยายประเภท:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

</xs:schema>

http://www.w3schools.com/schema/el_extension.asp

person andbi    schedule 16.03.2012

การหาประเภทตามส่วนขยายเป็นวิธีหนึ่งในการแก้ไขปัญหานี้อย่างแน่นอน อีกแนวทางหนึ่งซึ่งบางครั้งอาจทำงานได้ดีกว่าคือการใช้กลุ่มแบบจำลองที่มีชื่อ วิธีนี้มีความยืดหยุ่นมากกว่า เช่น ไม่ได้กำหนดข้อจำกัดว่าองค์ประกอบทั่วไปต้องมาก่อนองค์ประกอบที่กำหนดเอง

person Michael Kay    schedule 16.03.2012