如何使用schemaLocation或noNamespaceSchemaLocation将XML链接到XSD?

11

我找到了一些解决此问题的技巧,但仍未对我有所帮助。

以下是我的 XML。

<?xml version="1.0" encoding="UTF-8"?>
<work xmlns="http://www.w3.org/2001/XMLSchema"
      xmlns:tns="http://www.w3.org/2001/XMLSchema-instance"
      tns:schemaLocation="myXSDSchema.xsd">
  <tns:Objects>
    <tns:Object Name=":" Location=":">
    </tns:Object>
  </tns:Objects>
</work>

这是我的XSD文件:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        xmlns:tns = "http://www.w3.org/2001/XMLSchema" 
        elementFormDefault="qualified">
  (some checks)
</schema>

我的XSD文件和XML文件在同一个文件夹中。

如何将这两个文件链接起来?

1个回答

19

如何将XSD链接到XML文档取决于XML文档是否使用命名空间...

没有命名空间

使用xsi:noNamespaceSchemaLocation提供对要使用的XSD的提示:

  • XML

    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="example.xsd">
      <!-- ... -->
    </root>
    
  • XSD

  • <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="root">
        <!-- ... -->
      </xsd:element>
    </xsd:schema>
    

使用命名空间

使用xsi:schemaLocation提供XSD的提示信息:

  • XML

<ns:root xmlns:ns="http://example.com/ns"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://example.com/ns example-ns.xsd">
  <!-- ... -->
</ns:root>
  • XSD

  • <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                targetNamespace="http://example.com/ns">
      <xsd:element name="root">
        <!-- ... -->
      </xsd:element>
    </xsd:schema>
    

    没有命名空间,指定本地文件系统上的 xsd 的语法是否相同? - Thufir
    1
    是的,XSD语法对于本地或远程来说是相同的;两者都是URL。如果您在指定本地URL时遇到问题,请参阅如何正确引用本地XML模式文件? - kjhughes
    @kjhughes 在实践中,您可以使用 xsi:noNamespaceSchemaLocation 属性来引用具有目标命名空间的 XML Schema 文档。 - user7233170
    1
    @user7233170:除了这个答案已经说的,您还想要表达什么? - kjhughes

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接