【问题标题】:What effect does the attribute noNamespaceSchemaLocation have on XML parsing?属性 noNamespaceSchemaLocation 对 XML 解析有什么影响?
【发布时间】:2013-03-24 01:47:38
【问题描述】:

根据定义:

noNamespaceSchemaLocation 属性引用了一个没有目标命名空间的 XML Schema 文档。

这个属性将如何改变解析结果?

以这个 XML 为例:

<?xml version="1.0"?>
<name
  xmlns="http://www.example.com/name"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.example.com/name schema/schema.xsd"
  title="Mr.">
   <first>John</first>
   <middle>M</middle>
   <last>Doe</last>
</name>

引用此架构:

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.example.com/name"
targetNamespace="http://www.example.com/name" elementFormDefault="qualified">
  <element name="name">
    <complexType>
      <sequence>
        <element name="first" type="string"/>
        <element name="middle" type="string"/>
        <element name="last" type="string"/>
      </sequence>
      <attribute name="title" type="string"/>
    </complexType>
  </element>
</schema>

我从架构中删除了这些命名空间声明:

xmlns:target="http://www.example.com/name" 
targetNamespace="http://www.example.com/name" 

即使没有在引用 XML 中使用 noNamespaceSchemaLocation 属性,也不会引发错误。为什么我们首先需要这个属性?

【问题讨论】:

    标签: xml


    【解决方案1】:

    该属性对 XML 解析器没有影响。如果设置了适当的选项,它可能会影响 XML 模式处理器的行为;它可能类似地影响结合了 XML 解析和 XML 模式验证功能的程序的行为。它告诉模式处理器在哪里寻找描述文档的模式。

    但即使使用模式处理器,noNamespaceSchemaLocation 属性也不会影响像您这样元素都在命名空间中的文档的验证。

    【讨论】:

    • 感谢迈克尔的回复。我想我的问题应该是“属性 noNamespaceSchemaLocation 对 XML validation 有什么影响?”。如果我的文档的一部分没有命名空间,那么您的意思是 noNamespaceSchemaLocation 的效果将开始并纠正数据和架构的重叠“无命名空间”?
    • 该属性告诉模式处理器在哪里寻找可用于验证不在命名空间中的元素的模式。在您的示例中,没有任何此类元素。
    • 啊,酷。感谢迈克尔的澄清。现在完全理解了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多