"http://www.w3.org/2001/XMLSchema-instance"的 XSD 文件在哪里?



名称空间"http://www.w3.org/2001/XMLSchema-instance"的XSD模式定义文件在哪里?

听起来可能很奇怪,但是http://www.w3.org/2001/XMLSchema-instance名称空间的XML模式确实存在,并且可以通过名称空间URI表示的URL精确地找到: http://www.w3.org/2001/XMLSchema-instance

作为证明,只需在HTML浏览器(例如FireFox)中打开该链接(URL)即可。您可能会看到一些HTML文本,例如:"XML Schema实例名称空间…"。然后,将该"HTML"保存为计算机上的文件(例如file | save Page as)。当您查看这个文件时,您会发现它根本不是HTML。相反,它是该名称空间的完整XML模式!

同样,您可以将http://www.w3.org/2001/XMLSchema-instance名称空间导入到自己的模式中,如下所示:

<xs:import namespace="http://www.w3.org/2001/XMLSchema-instance"
           schemaLocation="http://www.w3.org/2001/XMLSchema-instance"/>

请参见这个问题:使用xjc解析xsd时出错,虽然听起来很不同,但实际上与相同的问题非常相关。

只是火上浇油——许多XML工具都内置了http://www.w3.org/2001/XMLSchema-instance知识,所以看起来根本不需要模式。实际上,如果您使用的XML工具不包含这些知识,则需要模式。

所以我们发现xml文档开头总是没有xml-schema xsd声明吗?例如:

<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee" 
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
         http://www.springframework.org/schema/jee 
         http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
         http://www.springframework.org/schema/util 
         http://www.springframework.org/schema/util/spring-util-3.2.xsd">

这里是关于这个话题的一些最新信息。

XSD 1.1第1部分§2.6规定:

XML模式定义语言:结构定义了几个属性在任何XML文档中直接使用。属性中包含这些属性模式实例名称空间(http://www.w3.org/2001/XMLSchema-instance)在上面的模式实例名称空间(xsi)(§1.3.1.2)中描述。所有模式处理器必须有适当的属性声明这些属性是内置的。

进一步,§3.2.6.4规定:

属性声明的{目标命名空间},无论是本地的还是顶级的,一定不能匹配http://www.w3.org/2001/XMLSchema-instance(除非它是下面给出的四个内置声明之一部分)。注意:这加强了它们的特殊地位属性,这样不仅不需要声明它们是允许的在实例中,但根据刚才给出的规则一定不能宣称。

因此,您不能在模式文档中声明xsi:typexsi:schemaLocation等属性,因此您不能导入试图声明这些属性的模式文档。

这当然是XSD 1.1,因此不直接约束XSD 1.0处理器。然而,这是XSD 1.1为XSD 1.0什么也没说的情况提供指导的众多领域之一,也是不同实现朝着不同方向发展的领域之一。

最新更新