每个命名空间都有targetNamespace吗?

时间:2012-03-24 22:21:15

标签: xml namespaces

我一直在使用XML一段时间了,但是我刚刚使用过的一些东西并没有真正理解为什么它们按照它们的方式工作。现在我想改变它。

这个问题与命名空间有关。

这是我认为到目前为止我所理解的:

  1. 命名空间可以是任何字符串。它意味着是世界范围内的唯一标识符。
  2. 为了使用命名空间限定XML元素,您不能简单地在命名空间前面添加前缀,您需要使用一个单独的前缀,该前缀需要在要应用的范围的开头声明名称空间为。
  3. 您可以自由选择前缀。
  4. 您无法自由选择命名空间(?)
  5. 虽然命名空间不一定引用任何URL作为URL,但它可以很好地引用targetNamespace。
  6. 现在,我的问题是,每个命名空间是否都引用了targetNamespace?当我声明xsi是XML Schema的前缀时,XML Schema是否在某处声明了与targetNamespace相同的命名空间? (哪里?)。当我声明xsl是XSLT名称空间的前缀时,这是否意味着XSLT名称空间被声明为targetNamespace(其中?)?

    如果我们可以在不引用targetNamespace的情况下拥有名称空间,那么在什么情况下我们会使用它们?我们为什么需要它们?

2 个答案:

答案 0 :(得分:2)

你做得很好,直到

  1. 您无法自由选择命名空间(?)
  2. 您是否可以自由选择名称空间取决于您想要做什么。如果您正在编写新的词汇表,则可以选择命名空间(或没有命名空间)。如果你想使用现有的词汇表,如XHTML或MathML或DocBook或......那么当然,你必须使用指定的命名空间。

    1. 虽然命名空间不一定引用任何URL作为URL,但它可以很好地引用targetNamespace。
    2. 这里的术语问题我想我也不确定你的意思。命名空间规范本身没有任何“targetNamespace”的概念。该术语用于w3c XML模式,以说明模式中描述的元素来自模式的“目标名称空间”。因此,它不是一个可以真正应用于XML文档中的单个命名空间实例的术语。

      左右....

        

      现在,我的问题是,每个命名空间是否都引用了targetNamespace?

      如上所述,我不确定这个问题是否有意义,但答案基本上是“不”。

        

      当我声明xsi是XML Schema的前缀时,是XML Schema   在某个地方声明与targetNamespace相同的名称空间?

      架构的架构声明了传统上用于xsi前缀的属性,从这个意义上讲,它将把这个命名空间作为其目标命名空间,是的。

        

      如果我们可以拥有名称空间而不引用targetNamespace,   在什么情况下我们会使用它们?我们为什么需要它们?

      在没有引用XSD架构的情况下定义的任何命名空间都没有任何可以称为targetNamespace的命令空间。但是,如果您有基于XSD的工作流,则始终可以从头开始或通过转换DTd或RelaxNg架构来创建此类架构。因此,命名空间是否存在XSD架构不是命名空间的固有属性。因此,例如XHTML命名空间http://www.w3.org/1999/xhtml很长一段时间(同样,在其html5版本中)没有任何关联的官方XSD架构,该URI具有该URI作为其目标命名空间。

答案 1 :(得分:1)

“targetNamespace”本质上是架构文档和命名空间之间的关系。模式文档与命名空间相关联,与其关联的命名空间称为其目标命名空间,而不是每个人与称为其出生年份的数字相关联的方式。因此询问“每个命名空间是否具有targetNamespace”有点像询问每个数字是否都有一年的生命。

也许你的问题是,每个命名空间都有一个架构吗?答案是否定的。您可以创建命名空间而无需为其创建架构。实际上,您可以为同一名称空间使用许多不同的模式。

相关问题