Мне просто интересно, по умолчанию пространства имен. У меня есть 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>
Я думаю, что оба они полностью верны, но у меня есть некоторые проблемы с реализацией некоторых jml-компонентов в java, которая не принимает первый, поэтому мне любопытно, есть ли спецификация xml, где указано, является ли первое aproach правильным или неправильным.
Первый подход действителен. В спецификации xml-names в разделе 6.2 "Помещение имён" объясняет:
Объем объявленного пространства имен по умолчанию простирается от начала стартового тега, в котором он отображается до конца соответствующего конечного тега, за исключением области любых внутренних деклараций пространства имен по умолчанию.
А также включает в себя этот пример:
<!-- 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>