XML targetNamespace和元素的非限定声明

3

我对XML模式中的targetNamespace属性如何影响元素命名有些困惑。在验证以下内容时,我遇到了错误:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" version="1.0">
    <xs:element name="testType" type="testType"/>
    <xs:complexType name="testType">
        <xs:sequence>
            <xs:element name="testSubtype" type="testSubType" />
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="testSubType">
        <!-- some fields -->
    </xs:complexType>
</xs:schema>

XMLSpy提示无法解析未限定的声明或定义“testSubType”。我该如何解决这个问题?我需要保留targetNamespace属性。我已经尝试在各种地方将testSubType更改为test:testSubType,但似乎不起作用。

1个回答

6
要么在模式元素中添加xmlns="test"属性来声明此模式的默认命名空间为"test",要么添加xmlns:t="test"以声明t为"test"命名空间的前缀,并在引用在此命名空间中定义的类型时使用该前缀,例如type=t:testSubType(通过将test作为你的targetNamespace来定义这个命名空间)。

这个答案为我节省了好几个小时。顺便提一下,我使用前缀取得了更多的成功,因为默认命名空间有时会产生其他意想不到的后果。 - wst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接