targetNamespace 和 xmlns 不带前缀,有什么区别?

2024-01-01

在 xml 架构文档中,如果我同时具有 targetNamespace 和 xmlns没有前缀.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.com/" xmlns="http://example.com/">

它们之间的确切区别是什么?我的理解是,如果您有一个没有前缀的 xmlns,则所有没有前缀的元素都会获取该名称空间,并且......令人困惑的是 targetNamespace 也是如此。


目标命名空间是一个 XML 模式“工件”;其目的:指示架构文件描述的特定 XML 命名空间。

xmlns- 因为 XML 模式是 XML 文档,所以可以为 XML 文件本身定义默认的 XML 命名空间(这就是 xmlns 属性的作用);影响是多重的:创作和写作。例如,不必为模式中定义的项目使用前缀,这些项目稍后会在同一文件中的其他位置引用(例如,用作属性或元素的类型的全局 simpleType)。

根据我的经验,许多 XML 模式作者认为这是“最佳实践”……所以您走在正确的道路上。

就XSD而言,targetNamespace规定了模式组件的限定名称的命名空间部分,其中包括元素、属性、组和属性组以及简单和复杂类型。 XSD 中定义的一些限定名称(元素和属性)由 XML 实例文档“直接”使用。其他的,例如类型,可以通过xsi:type http://www.w3.org/TR/xmlschema-1/#xsi_type实例 XML 文档中的属性。其余的(组、属性组)用于促进模式组合(通过引用)。

我还认为(一般来说)人们从两个角度来设计 XSD:

  • 以匹配现有的 XML。在这种情况下,如果您的 XML 使用命名空间,则对于所使用的每个命名空间,您最终都会得到一个具有匹配的 targetNamespace 属性的 XSD 架构元素。

  • 纯粹的建模。然后,您可以将 targetNamespace 视为类似于 UML 包、数据库模式、Java 包或 .NET 命名空间,以及它在这种情况下的所有含义。从根本上来说,它是一种避免命名冲突的机制;尽管如此,它也是一种在主题领域等中划分模型的机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

targetNamespace 和 xmlns 不带前缀,有什么区别? 的相关文章

随机推荐