嵌套元素中的默认命名空间

时间:2014-07-09 07:54:27

标签: java xml xsd xml-namespaces xsd-validation

我只是对默认命名空间感到好奇。我有以下xml:

<root xmlns="myNamespace">
    <someElement xmlns="anotherNamespace">
        <data>Info</data>
    </someElement>
    <anotherElement>
        <moreData>Info2</moreData>
    </anotherElement>
</root>

我的猜测是myNamespace<root><anotherElement>的继承。 anotherNamespace<someElement>中的默认命名空间,因此在此元素中,其子元素会覆盖另一个myNamespace

我知道我可以重写上面的xml代码,如:

<my:root xmlns:my="myNamespace">
    <a:someElement xmlns:a="anotherNamespace">
        <a:data>Info</a:data>
    </a:someElement>
    <my:anotherElement>
        <my:moreData>Info2</my:moreData>
    </my:anotherElement>
</my:root>

我认为两者都是完全有效但我在java中的一些xml bean实现有一些问题,它不接受第一个,所以我很好奇是否有一个xml规范,其中指定是否第一个aproach正确的。

1 个答案:

答案 0 :(得分:1)

第一种方法是有效的。在 6.2命名空间默认部分的xml-names specification中,它解释了:

  

默认命名空间声明的范围从   开始标记的开头,它出现在结尾处   相应的结束标记,不包括任何内部默认的范围   名称空间声明。

还包括这个例子:

<!-- initially, the default namespace is "books" -->
<book xmlns='urn:loc.gov:books'
      xmlns:isbn='urn:ISBN:0-395-36341-6'>
    <title>Cheaper by the Dozen</title>
    <isbn:number>1568491379</isbn:number>
    <notes>
      <!-- make HTML the default namespace for some commentary -->
      <p xmlns='http://www.w3.org/1999/xhtml'>
          This is a <i>funny</i> book!
      </p>
    </notes>
</book>