XSD:" URL属性"的含义of xs:schema元素

时间:2016-12-20 11:26:49

标签: xml url xsd namespaces

我想我理解XML中名称空间的主要目的是什么,但我不明白为什么有这么多属性。 W3C学校提供以下示例:

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
...
...
</xs:schema>  

xmlns:xs,targetNamespace和xmlns之间有什么区别?我们为什么要指定三个不同的URL,如果它们都不是&#34;有用的&#34;架构?这个URL应该有什么不同?

1 个答案:

答案 0 :(得分:1)

<强>的xmlns:XS = “http://www.w3.org/2001/XMLSchema”

这为名称空间“http://www.w3.org/2001/XMLSchema”声明了名称空间别名'xs'。这是定义XML模式(XSD)结构的名称空间。所有XML模式都必须位于此命名空间中。

<强>的xs:模式

文档的根元素,我们可以告诉它这是一个XML模式文档,因为 xs 别名引用名称空间“http://www.w3.org/2001/XMLSchema”。

<强>的targetNamespace = “http://www.w3schools.com”

这是架构的目标命名空间。这是该模式中所有元素都将成为其一部分的命名空间。在创建符合此模式的XML文档时,必须使用名称空间“http://www.w3schools.com”限定元素。

这可以从模式中省略,在这种情况下,所有元素都存在于空名称空间中。这是不好的做法,因为当你得到这样的XML文档时,很难分辨你正在看什么样的XML文档(你可以想象很多公司创建描述发票的模式,所有这些都是特定于创建它们的公司。)

<强>的xmlns = “http://www.w3schools.com”

这设置了默认命名空间,它基本上表示从现在开始找到的任何项目(不使用命名空间别名,即xs:element限定)都被认为是在此命名空间中。添加它的原因是,它可以引用模式中的项目,比如你声明一个,因为你有一个targetnamespace设置,这个类型的限定名称是AddressType @ http://www.w3schools.com,你只能使用它像这样,因为使用默认命名空间(http://www.w3schools.com)解析了值地址类型。您可能经常会看到用于targetnamespace的命名空间被别名,如 xmlns:ns =“http://www.w3schools.com”。在这种情况下,您将在显式限定AddressType的架构中看到此内容。

<强>将elementFormDefault = “合格”

这更复杂,可以在很大程度上被忽略。它几乎适用于您将遇到的每个模式(在您创建的任何模式上设置它的好习惯)。

它是什么意思呢?简而言之,它控制着如何限定输出XML文档中的命名空间。如果设置为 qualified ,则必须在XML文档中限定所有元素。

<ns:root xmlns:ns="http://www.w3schools.com">
    <ns:other/>
</ns:root>

如果设置为 unqualified (或省略 - 在这种情况下默认为 unqualified ),那么您不需要限定XML文档中的子项,假设它是因为父节点在其子节点的给定名称空间中(注意其他没有名称空间别名)。

<ns:root xmlns:ns="http://www.w3schools.com">
    <other/>
</ns:root>