xforms "проблема пространства имен экземпляра" - PullRequest
1 голос
/ 06 апреля 2010

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

Файл моего экземпляра имеет пространство имен "ai: инвентарь".

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

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

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

спасибо,

Ответы [ 3 ]

1 голос
/ 06 апреля 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, если ваш экземпляр является встроенным (а не внешним ресурсом), но я бы не рекомендовал полагаться на такое поведение.

0 голосов
/ 07 апреля 2010

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

0 голосов
/ 06 апреля 2010

Обычно объявление пространства имен применяется к текущему элементу и всем нисходящим элементам. Если вам нужно использовать одно и то же пространство имен как в модели, так и в представлении, то 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 = "", как в примере.

...