xmlns中的名称空间和XML文档中的schemaLocation属性不匹配

时间:2019-04-11 15:20:08

标签: xml xsd xsd-validation

我在w3schools中找到了一个示例,该示例显示了如何引用XML模式。

对于以下XSD(note.xsd)...:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3schools.com"
xmlns="https://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

...提出了XML实例:

<?xml version="1.0"?>

<note
xmlns="https://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://www.w3schools.com/xml note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

请注意,XML文档中的xmlnsxsi:schemaLocation具有不同的名称空间URI 。我知道,不会解析URI并且不会触发任何网络活动,但是在这种情况下定义不同的URI是否正确(即使域名相同)?

1 个答案:

答案 0 :(得分:1)

看起来不正确。这些名称空间应该匹配,否则验证程序不会将XML文档的名称空间(在这种情况下为默认名称空间https://www.w3schools.com)与来自note.xsd的架构中的适当元素声明/类型定义进行绑定。

让我们针对上述架构使用有效的给定XML:

XML validation failed

现在使用具有匹配的名称空间验证XML文档:

XML validation is successful

我认为这只是一个错字,因为next section中表示了相同的XML代码段(但具有匹配的名称空间)。