需要具有单独的XSD - 但希望它们引用/使用通用结构响应XSD

时间:2013-01-28 22:07:53

标签: xml xsd

我正在使用Spring 3.1

我有一个通用响应XSD,我用它作为几种请求类型的响应。我现在有了一个新要求,其中每个请求都需要具有单独的响应类型。但我想要的是这些新的响应具有相同的通用响应结构。属性ect是相同的,唯一的变化是名称,即<xs:element name="itemOneResponse">

我的通用回复 - genericResponse.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://me.com" attributeFormDefault="unqualified">
    <xs:element name="genericResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="responseCode" type="xs:int"/>
                <xs:element name="errorCode" type="xs:int"/>
                <xs:element name="errorDescription" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我有3个新的个人回复与通用回复相同,但名称不同。一个例子如下:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://me.com" attributeFormDefault="unqualified">
    <xs:element name="itemOneResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="responseCode" type="xs:int"/>
                <xs:element name="errorCode" type="xs:int"/>
                <xs:element name="errorDescription" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

如何获取新的自定义响应以引用genericResponse.xsd架构及其元素?

2 个答案:

答案 0 :(得分:0)

使用xs:complexType属性定义单个name,然后使用xs:complexType的{​​{1}}属性引用该type

xs:element

答案 1 :(得分:0)

编写一个通用的XSD文档,其中有一个使用abstract =“true”定义的genericResponse的元素声明。

然后为每种消息类型编写一个XSD文档,它使用xs:include来合并通用XSD,并使用subsitutionGroup =“genericResponse”定义响应的特定元素,以便可以使用特定元素代替抽象的,通用的。如果没有为此元素指定类型,那么它将继承genericResponse元素的类型。 (或者,您可以为自定义元素指定一种扩展或限制泛型类型的类型。)

然后,应针对特定消息类型的自定义架构验证单个消息。