XML验证:为什么在这种情况下明确指定不允许的命名空间?

时间:2015-06-12 07:22:16

标签: xml validation xsd xml-namespaces

鉴于以下XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:foo="urn:foo" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="urn:foo" 
            version="3.0">
  <xsd:complexType name="Something">
    <xsd:sequence>
      <xsd:element name="Nested" type="foo:NestedType"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="NestedType" />
</xsd:schema>

以下XML有效:

<ns:Something xmlns:ns="urn:foo" 
              xsi:type="ns:Something" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Nested />
</ns:Something>

虽然这个XML(唯一的区别:'嵌套'显式命名空间)不是:

<ns:Something xmlns:ns="urn:foo" 
              xsi:type="ns:Something" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ns:Nested />
</ns:Something>

(至少根据http://www.utilities-online.info/xsdvalidation/的验证者而言)。

为什么我不允许在Nested元素上指定命名空间?难道我不仅仅比严格必要更明确吗?

1 个答案:

答案 0 :(得分:2)

这是因为它在您定义的XSD中,elementFormDefault被隐含地设置为"unqualified"

因此,您无法为元素设置名称空间前缀。