如何在实践中引用xml架构?

时间:2010-02-11 17:54:56

标签: xml xsd

当您向文档添加xml架构时,我知道xmlns实际上不是xsd文件的位置。它是否正确?

  • 您如何在实践中引用xml文件的架构?
  • 通常是在网络服务器上吗?这看起来很健谈。
  • 是否以相对路径引用?
  • 它是否实际上没有在xml中引用,而是随意加载到xml解析器中?

有任何反馈吗?

3 个答案:

答案 0 :(得分:1)

Spring的例子:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
  default-lazy-init="true">
</beans>

xsi:schemaLocation将名称空间URI映射到schemata的实际位置。

然后,典型的解析环境使用解析器将这些解析器映射到本地副本。

答案 1 :(得分:1)

您有一个包含目标命名空间和限定元素的模式(这意味着您不必为元素添加前缀以应用目标命名空间):

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.exemple.com/my-namespace-URI"
        xmlns="http://www.exemple.com/my-namespace-URI"
        elementFormDefault="qualified">
    <-- Your schema definition -->
</xs:schema>

您必须将其包含在根元素中。首先是xml-schema命名空间:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

(从此处xsi:前缀对应于此命名空间)

然后引用schemaLocation属性

xsi:schemaLocation="http://www.exemple.com/my-namespace-URI my.xsd"

其中my.xsd是XSD文件的位置(默认情况下相对于XML文档的位置)。您可以输入完整的网址,例如

xsi:schemaLocation="http://www.exemple.com/my-namespace-URI http://www.exemple.org/xml/my.xsd"

这样就可以提供你的文件:

<?xml version="1.0"?>
<doc xmlns="http://www.exemple.com/my-namespace-URI"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.exemple.com/my-namespace-URI http://www.exemple.org/xml/my.xsd">
    <!-- Document content -->
</doc>

请注意,XSD文件URL不一定与名称空间URI相关。

答案 2 :(得分:0)

xmlns引用名称空间URI,它是架构的符号名称。 XML解析器可以根据实际的模式实例来解析这些名称空间URI。一些XML文档会以schemaLocation的形式给出一个提示,它应该是实际模式文件的URL,但是解析器可以自由地忽略它。

最佳做法是让解析应用程序拥有所需模式的本地(或可能是缓存)副本,并使其使用模式目录来解析这些本地模式的名称空间URI。