如何将xsi:type定义为XML模式中的属性?

Pet*_*ter 6 xml xsd

我有一个XML,我想写一个模式定义.问题是我不知道如何将xsi:type定义为属性.这是XML元素:

<SerializedData xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的XML模式定义如下所示:

<complexType name="SerializedDataType">
    <simpleContent>
        <extension base="double">

        </extension>
    </simpleContent>
</complexType>
Run Code Online (Sandbox Code Playgroud)

我也试过像Ian Roberts建议的那样定义它:

<element name="SerializedData"/>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用BPEL设计器初始化它时,如下所示:

<SerializedData xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)

我收到以下警告:

您输入的固定值似乎不是有效的XML(这是某些类型的固定值正常工作所必需的).它将以文本格式保存.

如果我像这样初始化它没有警告:

<SerializedData>300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)

但问题是我试图调用的Web服务要求SOAP消息包含属性xsi:type ="xs:double".如何将SOAP请求消息包含在内?

任何帮助将不胜感激!

Ian*_*rts 13

您不需要 - 只声明没有类型的元素.

<element name="SerializedData" />
Run Code Online (Sandbox Code Playgroud)

xsi:type属性用于向模式验证器指示元素的特定实例的实际类型不是元素的声明类型,而是从声明的类型派生的子类型.通过声明没有类型的元素,您说它可以具有任何类型,您将xsi:type在实例中使用它来指定哪个类型.

严格来说,你要声明一个元素,其类型是"ur-type",它是XML Schema类型层次结构的根源 - 所有类型,简单和复杂,最终都来自ur-type.如果要将SerializedData元素仅限制为简单内容(没有子元素或属性),则将其声明为

<element name="SerializedData" type="anySimpleType" />
Run Code Online (Sandbox Code Playgroud)

关于问题的第二部分,您的设计师工具是孤立的

<SerializedData xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)

是不正确的XML,因为xsi尚未声明命名空间.尝试添加名称空间声明:

<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)


Mic*_*Kay 6

xsi:type 属性不需要在模式中声明:它是隐式声明的,可以在任何元素上使用。但在一个实例中,它必须是一个有效的 QName。

如果你写

<SerializedData xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)

然后

(a) 要成为命名空间格式良好的,您需要声明“xsi”命名空间

(b) 要使模式有效,您还需要声明“xs”命名空间。

正如罗伯茨指出的,这意味着你应该写

<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xsi:type="xs:double">300.0</SerializedData>
Run Code Online (Sandbox Code Playgroud)