XSD:xs:架构元素"URL attribute"的含义



我想我知道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和XMLN之间有什么区别?如果没有一个对模式"有用",为什么还要指定三个不同的URL?并且该URL应该有所不同?

XMLNS:XS =" http://www.w3.org/2001/xmlschema"

这将为名称空间" http://www.w3.33.org/2001/xmlschema"声明名称空间别名'xs'。这是定义XML模式(XSD)的结构的名称空间。所有XML模式必须在此命名空间中。

XS:架构

文档的根元素,我们可以说这是XML模式文档,因为 xs 别名是指" http://www.w.org/2001/xmlschema"的命名空间。

targetNamespace =" http://www.w3schools.com"

这是模式的目标名称空间。这是该模式中所有元素的名称空间。当您创建符合此模式的XML文档时,则必须使用命名空间" http://www.w3schools.com"来限定元素。

这可以从模式中省略,在这种情况下,所有元素都存在于空名称空间中。这是不好的做法,因为当您获得这样的XML文档时,很难说出您正在查看哪种XML文档(您可以想象许多创建了描述发票的模式的公司,所有这些都是特定于该发票的机构创建它们的公司)。

XMLNS =" http://www.w3schools.com"

这设置了默认名称空间,它基本上说您从现在开始找到的任何项目(不符合名称空间别名,即xs:element),被认为是在此名称空间中。添加此内容的原因是,它可以在模式中参考项目,例如声明A,因为您有一个TargetNamespace集,因此此类型的合格名称是adverseType@http://www.w3schools.com,您只能使用它,因为使用默认名称空间(http://www.w3schools.com)解决了值地址类型。您可能经常看到用于目标名称空间的名称空间像 XMLNS一样被别名:NS =" http://www.w3schools.com" 而不是。在这种情况下,当您在地址类型明确有资格的模式中看到这一点。

element formdefault ="合格"

这更复杂,可以在很大程度上被忽略。它几乎设置在您会遇到的几乎所有模式下(将其设置在您创建的任何情况下)。

那怎么办?简单地将其控制在输出XML文档中的符合命名空间的方式。如果将其设置为合格,则所有元素必须在XML文档中符合资格。

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

如果将其设置为(或省略 - 在这种情况下默认为),则您无需在XML文档中限定子项目,它之所以假设是因为父母在给定的名称空间中,其子女是(注意其他没有名称空间别名)。

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

最新更新