我想在命名空间“foo”中定义一个模式,该模式在名称空间“bar”中导入一个模式,并定义了复杂类型,并在“bar”中引用类型。我错过了什么来进行验证? MWE如下。
根架构:
<?xml version="1.0" encoding="ISO-8859-1"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
xmlns:f="foo" xmlns:b="bar" targetNamespace="foo">
<import schemaLocation="Import.xsd" namespace="bar"/>
<element name="root" type="f:Root"/>
<complexType name="Root">
<sequence>
<!--<element ref="b:imported"/>-->
<element name="imported" type="b:ImportedType"/>
</sequence>
</complexType>
</schema>
导入的架构:
<?xml version="1.0" encoding="ISO-8859-1"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="bar"
elementFormDefault="qualified">
<complexType name="ImportedType"/>
<!--
<element name="imported">
<complexType/>
</element>
-->
</schema>
XML实例:
<?xml version="1.0" encoding="UTF-8"?>
<f:root xmlns:f="foo" xmlns:b="bar">
<b:imported/>
</f:root>
结果: 元素'{bar}已导入':此元素不是预期的。预期是({foo}导入)。
如果我将设计模式从Venetian Blind改为Salami Slice(在模式中切换评论)一切正常。但是我们所有的其他模式都在VB中,所以我宁愿不改变这种情况。
尝试使用xmllint和notepad ++进行验证
答案 0 :(得分:1)
您希望b:imported
代替f:imported
。
问题是,您已导入并使用类型。您的类型ImportedType
仍在b
。
然而,您的元素imported
(尽管名称所示)未从b
导入,但在f
中声明。
因此f:imported
是正确的和预期的。
如果要使用元素“转义”命名空间,请在imported
中声明f
并改为使用元素引用:
<xs:element ref="b:imported"/>