targetNamespace 和 xmlns

2023-11-24

这一页w3学校给出 以下是模式声明的一种形式。

<?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>

Here,

目标命名空间定义 XML 文档的命名空间 定义——哪些标签(元素)和哪些属性可以在“this”XSD 中定义的 XML 文档中使用。

xmlns=http://www.w3schools.com/schema/schema_schema.asp

另一方面,正在为 XML 文档中的名称定义默认命名空间 -- 那些没有被定义的名字 在“this”XSD(?)上,解析器首先查找在中声明的名称空间目标命名空间。如果在那里找不到该名称,请继续尝试下一个xmlns (?)

如果我跳过的话我到底会错过什么目标命名空间上面模式声明中的属性?虽然我有xmlns, 目标命名空间对我来说是多余的,因为它们指的是相同的名称空间。

什么 我失踪了吗?

Note:我见过XML 中的“xmlns”是什么意思?以及其他一些讨论。


要了解之间的区别targetNamespace and xmlns,请思考以下内容。

XSD是一种描述 XML 模式的语言。 任何计算机语言都必须以某种方式表达,即有一些运算符、关键字等。所有这些东西都称为语法。

XSD(即 W3C)的作者决定不再发明另一种语法, 而是使用 XML 本身来实现这一点。所以,XSD是用XML来表达的。XML is the carrier for it.

本质上,这是一种巧合。 XSD 作者为方便起见选择了它 (这种便利确实存在!)。 但是,这不是必要的要求。例如,还有另一种 XML 模式语言,称为RELAX NG,它不基于 XML。

但是一旦 XML 成为所有 XSD 文本的载体,你就必须处理 XML 特定的事情并且xmlns是这一个。基本上,它为给定 XML 文件的元素分配默认名称空间。它与该文件中恰好描述的 XML 模式无关。这只是 XML 文件的约定(无论它包含什么)。

The targetNamespace相反,是XSD语言本身的东西。 它指定模式描述的 XML 元素属于哪个命名空间。

之间存在一定的冗余targetNamespace and xmlns的确。 但没有办法利用(利用)它,从而消除其中之一。想想看:

XML 将被解析并转换为其他内容(例如XML信息集) 通过 XML 解析器。这样的解析器不需要了解有关 XSD 的任何信息,并且其输出也不会是 XML。因此,所有 XML 特定的东西都将丢失(即xmlns、命名空间前缀等)。

然后,该信息集(或其他内容)被传递到 XSD 处理器,该处理器从新开始,并且它必须拥有所有必要的信息。所以targetNamespace将是唯一告诉它该 XML 模式的目标名称空间的信息!

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

targetNamespace 和 xmlns 的相关文章

随机推荐