Xml架构中的目标命名空间的说明?

时间:2012-05-15 07:30:44

标签: xsd

例如,假设我们有以下架构(在http://www.w3.org/TR/xmlschema-0/#NS中列出)

<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:po="http://www.example.com/PO1"
        targetNamespace="http://www.example.com/PO1"
        elementFormDefault="unqualified"
        attributeFormDefault="unqualified">

  <element name="purchaseOrder" type="po:PurchaseOrderType"/>
  <element name="comment"       type="string"/>

  <complexType name="PurchaseOrderType">
    <sequence>
      <element name="shipTo"    type="po:USAddress"/>
      <element name="billTo"    type="po:USAddress"/>
      <element ref="po:comment" minOccurs="0"/>
      <!-- etc. -->
    </sequence>
    <!-- etc. -->
  </complexType>

  <complexType name="USAddress">
    <sequence>
      <element name="name"   type="string"/>
      <element name="street" type="string"/>
      <!-- etc. -->
    </sequence>
  </complexType>

  <!-- etc. -->

</schema>

您能解释一下“架构”节点中每个属性的用途是什么意思吗?我一直试图绕过它,但我不明白。如果我错了,请纠正我:

我认为xmlns="http://www.w3.org/2001/XMLSchema"指的是元素&amp;没有前缀的属性。

xmlns:po="http://www.example.com/PO1"似乎意味着以po为前缀的任何内容都指的是此网址(example.com/p01)。

我不明白targetNamespace的用途。我也不明白什么是合格或不合格的手段。

1 个答案:

答案 0 :(得分:1)

这是一个术语雷区,但基本上,xmlns="http://www.w3.org/2001/XMLSchema"xmlns:po="http://www.example.com/PO1"用于声明架构文档本身的命名空间。请记住,XML Schema只是一个XML文档,它需要声明它使用的命名空间,就像任何其他XML文档一样。

targetNamespace用于定义模式实例文档的名称空间,即符合您的模式的文档。这些文档将声明它们的名称空间为http://www.example.com/PO1,并使用它们选择的任何前缀,例如他们可以使用xmlns="http://www.example.com/PO1"xmlns:po="http://www.example.com/PO1"