如何在XML中指定名称空间和模式位置?

我的目标是创建一个正确引用描述结构的XSD文件的XML,而这两个文件都使用名称空间(通过在xmlns属性中设置默认名称空间来使用XML)。

我可以在XML xsi:noNamespaceSchemaLocation指定xsi:noNamespaceSchemaLocation属性,它至少在一些验证器(如http://www.validome.org/xml/validate/)中起作用。 但是,当我尝试添加名称空间时,验证器返回错误(如:无法找到元素'note'的声明。)

我准备的测试文件的最终版本附在下面。 我用xmllint测试它:

xmllint example.xml --schema example.xsd

它工作,但我指定了参数中的架构位置。 我的问题是:XML文件是否正确引用了XSD,并且它是否正确地使用了命名空间? 为什么验证器返回一个错误?

的example.xml:

<?xml version="1.0" encoding="UTF-8"?>
<note
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="example.xsd"
        xmlns="http://example/note"
>
        <from>Jacek</from>
        <to>Agatka</to>
        <body>Kocham cię!</body>
</note>

example.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns="http://example/note"
       targetNamespace="http://example/note"
>
       <xsd:element name="note">
               <xsd:complexType>
                       <xsd:sequence>
                               <xsd:element ref="from"/>
                               <xsd:element ref="to"/>
                               <xsd:element ref="body"/>
                       </xsd:sequence>
               </xsd:complexType>
      </xsd:element>

      <xsd:element name="from" type="xsd:string"/>

      <xsd:element name="to" type="xsd:string"/>

      <xsd:element name="body" type="xsd:string"/>

</xsd:schema>

schemaLocation属性也应该指定名称空间:

<?xml version="1.0" encoding="utf-8"?>
<note
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://example/note example.xsd"
  xmlns="http://example/note">
  <from>Jacek</from>
  <to>Agatka</to>
  <body>Kocham cię!</body>
</note>

在这里看到文档。

链接地址: http://www.djcxy.com/p/58795.html

上一篇: How to specify namespace and schema location in an XML?

下一篇: Parsing XML with namespace in Python via 'ElementTree'