协助XML XSD在多个元素之间进行选择
我有一个XML文档,如下所示:协助XML XSD在多个元素之间进行选择,xml,xsd,Xml,Xsd,我有一个XML文档,如下所示: <?xml version="1.0" encoding="utf-8"?> <Data> <AddressStreetNumber>123</AddressStreetNumber> <AddressStreetName>Main St</AddressStreetName> <AddressUnitNumber>10-B</Addres
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressStreetNumber>123</AddressStreetNumber>
<AddressStreetName>Main St</AddressStreetName>
<AddressUnitNumber>10-B</AddressUnitNumber>
<AddressUnitType>Apt</AddressUnitType>
<AddressLine1>123 Main St Apt 10-B</AddressLine1>
</Data>
123
主街
10-B
恰当的
123主街10-B号公寓
我希望XSD中的定义记录要包括的前4个元素或要包括的最后一个元素。基本上,消费者可以选择拆分地址,或者只使用元素“addressline1”来放置整个address1信息。我如何在XSD中描述这一点?我尝试过使用xsd:group和xsd:choice,但它似乎不起作用(或验证)
例如:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="householdaddress1parts">
<xs:all>
<xs:element name="AddressStreetNumber" type="xs:unsignedInt" minOccurs="0" />
<xs:element name="AddressStreetName" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AddressUnitNumber" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AddressUnitType" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:group>
<xs:group name="householdaddress1">
<xs:all>
<xs:element name="AddressLine1" minOccurs="0" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="164"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:group>
<xs:choice minOccurs="0">
<xs:group ref="householdaddress1parts"></xs:group>
<xs:group ref="householdaddress1"></xs:group>
</xs:choice>
</xs:schema>
我尝试过其他一些变体,但我猜即使在阅读了一段时间的文档之后,我也完全偏离了正轨(或者可能是一些非常明显的东西)。这是我对XSD的第一次尝试,我相信它会证明这一点。非常感谢您的帮助。此XML文档:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressStreetNumber>123</AddressStreetNumber>
<AddressStreetName>Main St</AddressStreetName>
<AddressUnitNumber>10-B</AddressUnitNumber>
<AddressUnitType>Apt</AddressUnitType>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressLine1>123 Main St Apt 10-B</AddressLine1>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Data">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="AddressStreetNumber"/>
<xs:element name="AddressStreetName"/>
<xs:element name="AddressUnitNumber"/>
<xs:element name="AddressUnitType"/>
</xs:sequence>
<xs:element name="AddressLine1"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
123
主街
10-B
恰当的
和此XML文档:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressStreetNumber>123</AddressStreetNumber>
<AddressStreetName>Main St</AddressStreetName>
<AddressUnitNumber>10-B</AddressUnitNumber>
<AddressUnitType>Apt</AddressUnitType>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressLine1>123 Main St Apt 10-B</AddressLine1>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Data">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="AddressStreetNumber"/>
<xs:element name="AddressStreetName"/>
<xs:element name="AddressUnitNumber"/>
<xs:element name="AddressUnitType"/>
</xs:sequence>
<xs:element name="AddressLine1"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
123主街10-B号公寓
与此XSD有效:
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressStreetNumber>123</AddressStreetNumber>
<AddressStreetName>Main St</AddressStreetName>
<AddressUnitNumber>10-B</AddressUnitNumber>
<AddressUnitType>Apt</AddressUnitType>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<Data>
<AddressLine1>123 Main St Apt 10-B</AddressLine1>
</Data>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Data">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="AddressStreetNumber"/>
<xs:element name="AddressStreetName"/>
<xs:element name="AddressUnitNumber"/>
<xs:element name="AddressUnitType"/>
</xs:sequence>
<xs:element name="AddressLine1"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>