我有一个xml模式需求,它接受客户或客户ID的请求。如果客户ID为0,那么我们需要客户数据,如果它> 0,那么客户数据是可选的(他们可以提交报表)。我的XSD目前看起来像这样;XSD中的条件必需元素
<xs:complexType>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1" type="xs:integer"/>
<xs:element ref="WhereSigned"/>
<xs:element name="ContactName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactTelephone" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactFax" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element ref="MainApplicant" maxOccurs="1"/>
<xs:element ref="JointApplicant" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
</xs:complexType>
我需要的东西有点像这样...(我希望它是这个简单的,但可惜不是。)
<xs:complexType>
<xs:choice>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element ref="WhereSigned"/>
<xs:element name="ContactName" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactTelephone" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactFax" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ContactEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element ref="MainApplicant" maxOccurs="1"/>
<xs:element ref="JointApplicant" minOccurs="0" maxOccurs="1"/>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
<xs:any>
<xs:element name="UserID" type="xs:string" minOccurs="1"/>
<xs:element name="Password" type="xs:string" minOccurs="1"/>
<xs:element name="ReferenceNumber" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="CustomerId" minOccurs="1" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element ref="Asset" minOccurs="0" maxOccurs="1"/>
</xs:any>
</xs:choice>
</xs:complexType>
A是否有XSD专家(这些人甚至存在吗?!)谁能够伸出援手或一些建议?
非常感谢,
肖。
您允许使用模式版本1.1吗?在这种情况下,你可以断言 - 'xs:assert'(http://www.w3.org/TR/xmlschema11-1/#cAssertions) – potame
我已经看过这些,可以看到它可以用来引发错误依赖关于元素及其属性的值,但是我的XSD并没有足够的精力来看到如何将这个应用于条件逻辑的元素条件..:s – Shawson