проблема с пространством имен экземпляра xforms

Я создаю Xform, который читает XML-документ и создает форму ввода для обновления документа. Однако, по-видимому, из-за проблемы с пространством имен ни одно из моих выражений Xpath не разрешается. Моя форма отлично работает на простом экземпляре, когда файл экземпляра не имеет пространства имен. Однако мне нужна поддержка пространства имен.

Мой файл экземпляра имеет пространство имен «ai:inventory».

Я ссылаюсь на данные экземпляра

Где я должен объявлять префикс «ai» для своего пространства имен, чтобы мои выражения XPath могли найти соответствующие элементы? /ai:инвентарь/продукты ?

Я пытался создать префикс в открывающем теге html... это не помогло.

Благодарность,


person user302254    schedule 06.04.2010    source источник
comment
Покажите нам очень простой экземпляр, в котором все еще есть проблема с пространством имен.   -  person Dimitre Novatchev    schedule 06.04.2010


Ответы (3)


Обычно объявление пространства имен применяется к текущему элементу и всем нисходящим элементам. Если вам нужно использовать одно и то же пространство имен как в модели, так и в представлении, хорошим выбором будет тег html. Что-то вроде этого:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="yournamespace">
  <head>
    <xf:model>
      <xf:instance xmlns="">
        <ai:inventory>
          <product>Hello</product>
        </ai:inventory>
      </xf:instance>
    </xf:model>
  </head>
  <body>
    <xf:output ref="/ai:inventory/product"/>
  </body>
</html>

Имейте в виду, что если вы используете элементы без пространства имен в экземпляре, а также используете XHTML в качестве пространства имен по умолчанию, вам необходимо повторно объявить пространство имен по умолчанию с помощью xmlns="", как в примере.

person Tambet    schedule 06.04.2010

Экземпляр XForms сам по себе является XML-документом, поэтому вы должны включать соответствующие объявления пространств имен для каждого экземпляра в вашей форме:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="http://example.com/">
  <head>
    <xf:model>
      <xf:instance>
        <ai:inventory xmlns="" xmlns:ai="http://example.com/">
          <product>foo</product>
        </ai:inventory>
      </xf:instance>
    </xf:model>
  </head>
  <body>
    <xf:output ref="/ai:inventory/product"/>
  </body>
</html>

Есть некоторые процессоры, которые будут правильно оценивать XPath, если ваш экземпляр является встроенным (а не внешним ресурсом), но я бы не рекомендовал полагаться на такое поведение.

person Phil Booth    schedule 06.04.2010

Оба ответа были исправлены. Однако я обнаружил, что моя проблема связана с использованием таблицы стилей xsltforms xsl для рендеринга моей формы xform. когда я перешел на orbeon, все работало нормально.

person user302254    schedule 06.04.2010
comment
Firefox по-прежнему не поддерживает ось пространства имен, а XSLTForms включает (не идеальный) обходной путь для пространств имен. В некоторых случаях даже требуется добавление фиктивного элемента или атрибута. Какой браузер вы используете? - person Alain Couthures; 11.04.2011