Пространства имен по умолчанию во вложенных элементах

1

Мне просто интересно, по умолчанию пространства имен. У меня есть 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 правильным или неправильным.

  • 0
    Вы правы, пространства имен работают так, как вы описываете. Если вы находите программное обеспечение, которое ошибается, задайте вопрос, который описывает, что вы делаете и каков эффект.
  • 0
    @MichaelKay спасибо за ваш комментарий :). Проблема в том, что мой WS отвечает стороннему java-клиенту первым подходом, но этот клиент его не распознает. Если я изменяю свой WS, чтобы ответить вторым подходом, клиент работает правильно. Я не знаю точную реализацию этого клиента и задаю этот вопрос, чтобы узнать, связана ли проблема с моим WS или с реализацией клиента.
Теги:
xsd
xsd-validation
xml-namespaces

1 ответ

1
Лучший ответ

Первый подход действителен. В спецификации 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню