我有一个 XML 架构,它定义了一个元素,该元素可以是 base64 文本,也可以是 xop:Include 元素。目前,这被定义为 base64Binary 类型:
<xs:element name="PackageBinary" type="xs:base64Binary" minOccurs="1" maxOccurs="1"/>
Run Code Online (Sandbox Code Playgroud)
当我插入 xop:Include 元素时,它看起来像这样:
<PackageBinary>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="http://google.com/data.bin" />
</PackageBinary>
Run Code Online (Sandbox Code Playgroud)
但这会产生 XML 验证错误(我正在使用 .NET 验证器):
元素“mds:xml-schema:soap11:PackageBinary”不能包含子元素“ http://www.w3.org/2004/08/xop/include:Include ”,因为父元素的内容模型仅为文本。
这是有道理的,因为它不是 base64 内容,但我认为这是常见的做法......?有什么方法可以在架构中支持这一点吗?(我们有支持此语法的现有产品,但我们现在正在添加验证。)
我能想到的最好办法是创建一个允许任何标签的复杂类型,但也被标记为“混合”,因此它允许文本。这并没有显式地将内容声明为 base64,但确实让它通过了验证。
<xs:complexType name="PackageBinaryInner" mixed="true">
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="PackageBinary" type="PackageBinaryInner" minOccurs="1" maxOccurs="1"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2359 次 |
| 最近记录: |