有人可以告诉我,是否可以定义一个可以包含复杂子类型的多个元素的类型。然而,
示例:
<Identifiers>
<ns:Identifier xmlns:ns='http://schemas.com/common'>
<ns0:SourceSystem xmlns:ns0='http://schemas.com/common'>ORACLE</ns0:SourceSystem>
<ns0:IDType xmlns:ns0='http://schemas.com/common'>PARTY_ID</ns0:IDType>
<ns0:IDValue xmlns:ns0='http://schemas.com/common'>38784313</ns0:IDValue>
</ns:Identifier>
<ns:Identifier xmlns:ns='http://schemas.com/common'>
<ns0:SourceSystem xmlns:ns0='http://schemas.com/common'>ORACLE</ns0:SourceSystem>
<ns0:IDType xmlns:ns0='http://schemas.com/common'>ANY_ID</ns0:IDType>
<ns0:IDValue xmlns:ns0='http://schemas.com/common'>12345</ns0:IDValue>
</ns:Identifier>
Identifier元素的第一次出现具有IDType的强制值“PARTY_ID”。第二次出现是可选的,可以从枚举中获得任何值。
以下是当前XSD的一些摘录,其中对标识符元素的数量没有限制。
<xsd:complexType name="IdentifiersType">
<xsd:sequence>
<xsd:element name="Identifier" type="cmn:IdentifierType" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:complexType name="IdentifierType">
<xsd:sequence>
<xsd:element name="SourceSystem"/>
<xsd:element ref="cmn:IDType"/>
<xsd:element name="IDValue" type="xsd:string"/>
</xsd:sequence>
<xsd:simpleType name="IDType">
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
<xsd:enumeration value="VENDOR_ID"/>
<xsd:enumeration value="VENDOR_SITE_ID"/>
<xsd:enumeration value="VENDOR_SITE_NUMBER"/>
<xsd:enumeration value="APPLICANT_ID"/>
<xsd:enumeration value="AGMNT_ID"/>
<xsd:enumeration value="SAMPLE_ID"/>
<xsd:enumeration value="PROGRAM_ID"/>
<xsd:enumeration value="QUOTE_ID"/>
<xsd:enumeration value="AAA_PARTY_ID"/>
...
<xsd:enumeration value="PARTY_ID"/>
</xsd:restriction>
非常感谢任何帮助。
答案 0 :(得分:0)
您似乎在这里有两种不同的元素:聚会标识符(必需)和非聚会标识符的标识符(可选)。为什么你选择给他们相同的名字?考虑一下程序员说“我想要有四个变量;第一个应该是一个所需值为42的整数,而第二个和第四个应该是可能会或可能不会被初始化的字符串,第三个应该是一个指针。哦,他们都必须被称为x
。为什么这种编程语言的类型系统不能让我这样做呢?“在XSD中,与XML DTD和XML的大多数其他模式语言一样,约束与元素名称相关联。如果需要不同的约束集,请使用不同的元素名称。
以下XML在架构中更容易验证,因为它不会对工具产生影响。
<Identifiers>
<partyID sourceSystem="ORACLE">38784313</partyID>
<anyID sourceSystem="ORACLE">12345</anyID>
</Identifiers>
如果您真的更喜欢为难以理解的XML编写难以理解的模式而不是简单XML的简单模式,请使用XSD 1.1和断言。