5

以下 xml 文档和架构是从一个更大的架构中总结出来的,在该架构中首先出现了问题:

xml文档:

<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd">
    <f2b:Bar>text</f2b:Bar>
</f2b:Foo>

架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar">
    <xs:complexType name="T_Foo">
        <xs:sequence>
            <xs:element name="Bar" xmlns="f2b"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Foo" type="f2b:T_Foo"/>
</xs:schema>

<f2b:Bar>当我根据架构验证文档时,我在-element上收到一条错误消息,指出这<f2b:Bar>不是预期的。为了使文档有效,我必须将<Bar>-element 显式 (!) 放入 'null-namespace': <Bar xmlns="">。我不明白为什么应该期望一个空命名空间元素。该模式为所有元素定义了一个命名空间,而对于<Foo>-element,f2b-namespace 确实是验证器所期望的。但即使我<Bar>像上面那样在 -element 定义中显式设置命名空间,验证器仍然需要xmlns=""-element Bar。我尝试了架构和文档的几种变体,但没有找到答案——我根本无法猜测为什么在这种特殊情况下会出现空命名空间。

任何提示表示赞赏... ekke

4

1 回答 1

3

简短回答:添加elementFormDefault="qualified"到架构的根xs:schema标签。

更长的答案:默认情况下,只有顶级“全局”元素声明采用模式的目标命名空间。复杂类型内的“本地”元素声明不在命名空间中。您可以使用标签form上的属性覆盖一个特定的本地元素,或者使用.xs:elementelementFormDefaultxs:schema

于 2013-10-08T22:01:19.657 回答