0

我正在使用 Spring 3.1

我有一个通用响应 XSD,我将其用作多种请求类型的响应。我现在有一个新要求,其中每个请求都需要有一个单独的响应类型。但我想要的是这些新响应具有与通用响应相同的结构。属性等是一样的,唯一的变化是名称,即<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 架构及其元素?

4

2 回答 2

0

定义一个xs:complexType带有name属性的单,然后xs:complexType使用 的type属性来引用它xs:element

<?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" type="genericResponse"/>
    <xs:element name="itemTwoResponse" type="genericResponse"/>
    <xs:element name="itemThreeResponse" type="genericResponse"/>

    <xs:complexType name="genericResponse">
        <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:schema>
于 2013-01-28T22:22:23.790 回答
0

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

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

然后应针对特定消息类型的自定义模式验证单个消息。

于 2013-01-29T09:10:59.787 回答