An example of an XSD element replacement group?

I would like to specify a single choice type for several expandable types.

For example, let's say we have a sea, there are many types of fish in the sea. Therefore, in XML, I will write:

<Sea name="Atlantic Ocean"> <Tuna name="tuna1" /> <Carp name="carp1" /> <Carp name="carp2" /> <Tuna name="tuna2" /> <Salmon name="salmon1" /> </Sea> 

Xsd

  <xs:complexType name="Fish"> </xs:complexType> <xs:complexType name="Salmon"> <xs:complexContent> <xs:extension base="Fish"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Carp"> <xs:complexContent> <xs:extension base="Fish"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Tuna"> <xs:complexContent> <xs:extension base="Fish"> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="Sea"> <xs:complexContent> <xs:extension base="GeoZone"> <xs:sequence minOccurs="0" maxOccurs="unbounded"> <xs:choice> <xs:element type="Fish" name="Fish" minOccurs="0" maxOccurs="unbounded"/> </xs:choice> </xs:sequence> <xs:attribute name="Name" type="xs:string" use="optional" /> </xs:extension> </xs:complexContent> </xs:complexType> 

Unfortunately, this is not true, since I can only add the Fish type, and not its extension types.

+5
source share
1 answer

Use the element replacement group ...

Xsd

 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Sea"> <xs:complexType> <xs:sequence> <xs:element ref="FishSubGroup" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:string" use="optional"/> </xs:complexType> </xs:element> <xs:element name="FishSubGroup" abstract="true"/> <xs:element name="Tuna" type="FishType" substitutionGroup="FishSubGroup"/> <xs:element name="Carp" type="FishType" substitutionGroup="FishSubGroup"/> <xs:element name="Salmon" type="FishType" substitutionGroup="FishSubGroup"/> <xs:complexType name="FishType"> <xs:attribute name="name" type="xs:string"/> </xs:complexType> </xs:schema> 

XML

 <?xml version="1.0" encoding="UTF-8"?> <Sea name="Atlantic Ocean"> <Tuna name="tuna1"/> <Carp name="carp1"/> <Carp name="carp2"/> <Tuna name="tuna2"/> <Salmon name="salmon1"/> </Sea> 
+5
source

Source: https://habr.com/ru/post/1257722/


All Articles