我有以下两个元素,product和customerAccount。
该产品具有以下结构,包含两个元素productSerialNumber和serviceGuidingIdentifer
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="productSerialNumber" type="xs:string" />
<xs:element name="serviceGuidingIdentifer">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" />
<xs:element name="type" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
客户帐户具有以下结构
<xs:element name="customerAccount">
<xs:complexType>
<xs:sequence>
<xs:element name="ID"type="xs:string" />
</xs:sequence>
</xs:complexType>
现在我想有一个选择,用户只能声明上面三个元素中的一个,即任何一个 1)productSerialNumber 要么 2)serviceGuidingIdentifer 要么 3)customerAccount
每当我试图声明选择时,我都会面临错误,指出找不到元素或元素定义不一致。
我尝试过以下选择声明
<xs:choice>
<xs:element ref="tns:productSerialNumber"/>
<xs:element ref="tns:serviceGuidingIdentifer"/>
<xs:element ref="tns:customerAccount"/>
</xs:choice>
在选择中重新声明不同组元素的正确方法是什么。
非常感谢任何帮助
谢谢和问候, 开发
答案 0 :(得分:1)
至少有两个元素不是顶级元素,因此您无法“引用”它们。以下模式有效(在Eclipse中):
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/test"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/test"
elementFormDefault="qualified">
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element ref="tns:productSerialNumber" />
<xs:element ref="tns:serviceGuidingIdentifer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="productSerialNumber" type="xs:string" />
<xs:element name="serviceGuidingIdentifer">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" />
<xs:element name="type" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="customerAccount">
<xs:complexType>
<xs:sequence>
<xs:element name="ID" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="choice-element">
<xs:complexType>
<xs:choice>
<xs:element ref="tns:productSerialNumber" />
<xs:element ref="tns:serviceGuidingIdentifer" />
<xs:element ref="tns:customerAccount" />
</xs:choice>
</xs:complexType>
</xs:element>
</schema>
答案 1 :(得分:0)
如果将它们定义为复杂类型,则可以改为ref的类型。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.Product" targetNamespace="http://Scratch.Product" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0">
<xs:element name="productSerialNumber" type="xs:string" />
<xs:element name="serviceGuidingIndetifier" type="serviceGuidingIdentiferType" />
<xs:element name="customerAccount" type="customerAccountType" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="serviceGuidingIdentiferType">
<xs:sequence>
<xs:element name="ID" type="xs:string" />
<xs:element name="type" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="customerAccountType">
<xs:sequence>
<xs:element name="ID" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>