Xml 在xsd中,如何重新声明所选的不同组元素
我有以下两个要素,产品和客户帐户 该产品具有以下结构,包含两个元素:productSerialNumber和serviceGuidingIdentiferXml 在xsd中,如何重新声明所选的不同组元素,xml,xsd,Xml,Xsd,我有以下两个要素,产品和客户帐户 该产品具有以下结构,包含两个元素:productSerialNumber和serviceGuidingIdentifer <xs:element name="product"> <xs:complexType> <xs:sequence> <xs:element name="productSerialNumber" type="xs:string" /> <xs:element
<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) 产品序列号
或
2) 服务指南标识符
或
3) 客户帐户
每当我试图声明选择时,我都会遇到这样的错误:要么元素未找到,要么元素定义不一致
我尝试了以下选择声明
<xs:choice>
<xs:element ref="tns:productSerialNumber"/>
<xs:element ref="tns:serviceGuidingIdentifer"/>
<xs:element ref="tns:customerAccount"/>
</xs:choice>
在选项中重新声明不同组元素的正确方法是什么
任何帮助都将不胜感激
感谢和问候,
Dev至少有两个元素不是顶级元素,因此不能“引用”它们。以下架构有效(在Eclipse中):
至少有两个元素不是顶级元素,因此不能“引用”它们。以下架构有效(在Eclipse中):
如果将它们定义为复杂类型,则可以改为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>
如果将它们定义为复杂类型,则可以改为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>
需要注意的是,任何顶级元素都可以有效地用作基于该架构的文档中的根元素,这可能是OP想要的,也可能不是OP想要的。感谢您的快速回复。令人伤心的是,我正在使用soapUI,它在加载期间抛出一个错误,对中的所有引用都说“element not found”。我认为在解析时没有考虑名称空间。我们将使用soapUI,所以我不太确定是什么让UI正确解析它。需要注意的是,任何顶级元素都可以有效地用作基于该架构的文档中的根元素,这可能是OP想要的,也可能不是OP想要的。感谢您的快速回复。令人伤心的是,我正在使用soapUI,它在加载期间抛出一个错误,对中的所有引用都说“element not found”。我认为在解析时没有考虑名称空间。我们将使用soapUI,所以我不太确定是什么让UI正确地解析它