当我们使用命名空间时,我们还应指出其关联的XSD所在的位置,如以下示例所示:
<?xml version="1.0"?>
<Artist BirthYear="1958"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.webucator.com/Artist"
xsi:schemaLocation="http://www.webucator.com/Artist Artist.xsd">
<Name>
<Title>Mr.</Title>
<FirstName>Michael</FirstName>
<LastName>Jackson</LastName>
</Name>
</Artist>
在这里,我们已经指出Artist.xsd应该用于验证http://www.webucator.com/Artist
命名空间。但是,我们也使用http://www.w3.org/2001/XMLSchema-instance
命名空间,但我们没有指定其XSD所在的位置。 XML解析器如何知道如何处理这个命名空间?
更新(回应第一位评论者)
那么,我们可以代替使用:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ehcache="http://www.springmodules.org/schema/ehcache"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springmodules.org/schema/ehcache
http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd">
...
</beans>
使用
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ehcache="http://www.springmodules.org/schema/ehcache">
...
</beans>
答案 0 :(得分:9)
XML解析器如何知道如何处理此命名空间?
除非他们这样做,否则他们不会这样做。基本的想法是字符串&#39; http://www.w3.org/2001/XMLSchema-instance&#39;就像一个神奇的饼干。处理软件已经被编程为识别它,因此根据它的含义或者它没有作用。因此,仅仅通过识别这一事实也可以获得知识&#34;它代表什么:a "namespace" that defines four attributes(&#39;类型&#39;,&#39; nil&#39;,&#39; schemaLocation&#39;&#39; noNamespaceSchemaLocation&#39;)与修复预定义含义。
换句话说,如果你&#34;知道&#34;字符串&#39; http://www.w3.org/2001/XMLSchema-instance&#39; &#34;表示&#34;,然后您还会自动知道an attribute named xsi:schemaLocation&#34;表示&#34;:它指向在&#39; W3C XML Schema&#39;中编码的模式文档。形式主义。
这超出了XML Namespaces Rec实际提供的范围(这只是一些关于&#34;通用名称&#34;或诸如此类的东西)。一个约定在这里工作,命名空间的语法(使用冒号名称)已被部署以硬编码语义理解:&#34;在W3C的形式主义中找到模式的位置XML Schema,适用于此文档实例。&#34;这一切都取决于对魔法饼干串的先前理解。
您可能会认为命名空间必须具有架构,并且机器可以处理该架构,并且只能在W3C XML Schemas形式中启动。这些都不一定是真的。存在其他模式形式(SGML / XML DTD,Relax-NG,与W3C XML Schema不同,它们都是international standards);命名空间定义不必是机器可读的(它可能是散文,因为它实际上是用于&#39; http://www.w3.org/2001/XMLSchema-instance&#39;命名空间!);并且根本不需要正式定义命名空间,因为保证所有命名空间字符串都可以用作消歧标记。
答案 1 :(得分:2)
无需说明架构的位置。如果你愿意,你可以这样做,但你不必这样做。
在此示例中,所有平台都可能了解xsi
,xml
,xsd
和soap
的架构都位于何处。
编辑:就像我说的,所有平台都可能知道这些着名命名空间的模式所在。很可能,他们都有模式的副本。我使用Visual Studio,它在线保存这些模式的副本,并在必要时引用它们。
答案 2 :(得分:2)
Xml schemata有四个内置声明; type
,nil
,schemaLocation
和noNamespaceSchemaLocation
按“定义”存在于每个架构中。您可以在Xml Schema recommendation。
答案 3 :(得分:0)
如果您查看以下内容:http://www.w3.org/2001/XMLSchema-instance,您会发现有文字:
...
<xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
<h1>XML Schema instance namespace</h1>
<p>See <a href="http://www.w3.org/TR/xmlschema-1/">the XML Schema
Recommendation</a> for an introduction</p>
...
因为xmlns="http://www.w3.org/1999/xhtml"
您将上面的链接视为HTML文档。
根据http://www.w3.org/TR/xmlschema-1/#schema-loc(架构表示约束:架构文档位置策略)架构感知处理器可以按任何顺序实现以下策略的任意组合:
所以http://www.w3.org/2001/XMLSchema-instance
指向自己(是的,递归!!)。
见类似答案:Where is the XSD file for "http://www.w3.org/2001/XMLSchema-instance"?
<强> PS 即可。任何专门的XML处理器都可以将http://www.w3.org/2001/XMLSchema-instance
视为已知事物,而无需实际下载此定义(大多数都是这样做的)。
<强> PPS 即可。由 XML架构标准http://www.w3.org/TR/xmlschema-1/
定义的http://www.w3.org/2001/XMLSchema-instance
的语义