Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XML中指定命名空间和架构位置?_Xml_Xsd_Xml Namespaces - Fatal编程技术网

如何在XML中指定命名空间和架构位置?

如何在XML中指定命名空间和架构位置?,xml,xsd,xml-namespaces,Xml,Xsd,Xml Namespaces,我的目标是创建一个正确引用描述结构的XSD文件的XML,而这两个文件都使用名称空间(通过在xmlns属性中设置默认名称空间来创建XML) 我可以在XML中指定xsi:noNamespaceSchemaLocation属性,它至少可以在某些验证器中工作(如)。但当我尝试添加名称空间时,验证程序返回错误(例如:找不到元素“note”的声明) 我准备的测试文件的最终版本附在下面。我用xmllint测试了它,比如: xmllint example.xml --schema example.xsd 这是

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

我可以在XML中指定
xsi:noNamespaceSchemaLocation
属性,它至少可以在某些验证器中工作(如)。但当我尝试添加名称空间时,验证程序返回错误(例如:找不到元素“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>

亚切克
阿加特卡
科查姆·齐奥!

请参阅文档。

谢谢!至少Validome开始接受我的例子。无论如何,这有点奇怪:我声明了两次名称空间——一次在模式文件中,一次在XML中。它似乎是多余的,没有任何用途,因为验证器不允许我在XML中重命名名称空间(比如
xsi:schemaLocation=”http://example/note2 example.xsd“xmlns=”http://example/note2“