XJC: создание заглушки для схем XBRL

По прошествии нескольких часов я не могу создавать заглушки Java для нескольких xrbl XSD. Кажется, проблема с устаревшими файлами. Затем каждый раз, когда вы пытаетесь настроить выходные данные xjc:

[ОШИБКА] XPath-оценка "схемы" приводит к пустому целевому узлу
строка 4 файла: / C: /Users/Carlos%20Conti/Desktop/ipp/2008/bindings.xml

После этого теория гласит, что я должен написать настройку в виде внешнего bindings.xml файла, в котором я разрешу конфликт, но я не могу это преодолеть. В настоящее время я застрял в точке, где XPath не может найти самый простой узел в указанном файле внутри файла настройки.

Вот файл настройки:

<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <jxb:bindings schemaLocation="http://www.xbrl.org/2003/xl-2003-12-31.xsd" node="schema">
    <jxb:bindings node="//complexType[@name='locatorType']//sequence/element[@ref='xl:title']">
      <jxb:property ref="xlink:title" />
    </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>

Когда я включаю это как внешнюю настройку, выводится дополнительная ошибка:

[ОШИБКА] XPath-оценка "схемы" приводит к пустому целевому узлу
строка 4 файла: / C: /Users/Carlos%20Conti/Desktop/ipp/2008/bindings.xml

Файл, из которого я пытаюсь создать классы Java, довольно большой. Извините, но я тоже не могу связать это. Однако основная проблема возникает из-за импортированного xsd внутри этого файла (xl-2003-12-31.xsd), который можно найти здесь:

Так что этой информации должно быть достаточно для решения проблемы.

Я почти уверен, что это крошечная деталь, которую я опускаю, но я не могу понять.

Любые советы приветствуются.


person Chal.lo    schedule 03.01.2017    source источник


Ответы (1)


Мне кажется, что с пространствами имен что-то не так.

Выражение XPath:

//complexType[@name='locatorType']//sequence/element[@ref='xl:title']

везде пустые префиксы, но, похоже, пространство имен по умолчанию не входит в область видимости. Следовательно, если XJC не предоставляет и не документирует пространство имен по умолчанию, это означает, что указанное выше выражение XPath вернет пустую последовательность. Действительно, элементы схемы XML находятся в пространстве имен схемы XML. Вы также можете увидеть это в схеме XLink XBRL (ссылка предоставлена), потому что, хотя она не использует префиксы, она имеет привязку к пространству имен по умолчанию:

xmlns="http://www.w3.org/2001/XMLSchema"

Поскольку корневой элемент в файле настройки связывает это пространство имен с префиксом xsd, это выражение XPath может работать лучше:

//xsd:complexType[@name='locatorType']//xsd:sequence/xsd:element[@ref='xl:title']

То же самое относится и к строке выше: node="schema", вероятно, следует заменить на node="xsd:schema".

Важно помнить, что префиксы (или их отсутствие) не имеют значения, имеют значение только пространства имен:

  • Префикс, привязанный к двум разным пространствам имен в двух разных файлах, не будет соответствовать самому себе.
  • Однако два префикса, привязанные к одному и тому же пространству имен, будут совпадать.
person Ghislain Fourny    schedule 05.01.2017