Элемент XBRL привязки JAXB не работает

Я пытаюсь создать локализованные классы XBRL с помощью JAXB в Eclipse, но получаю сообщение об ошибке:

[ERROR] Property "Title" is already defined. Use <jaxb:property> to resolve this conflict. 
line 145 of http://www.xbrl.org/2003/xl-2003-12-31.xsd

[ERROR] The following location is relevant to the above error
line 151 of http://www.xbrl.org/2003/xl-2003-12-31.xsd

Как следует из ошибки, элемент и имя атрибута конфликтуют. Это строки 145 и 151:

<element ref="xl:title" minOccurs="0" maxOccurs="unbounded" />
<attribute ref="xlink:title" use="optional" />

Поэтому мне нужно переименовать либо (или оба). Это то, что я пытался сделать - привязать заголовок элемента к titleElement:

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

Это приводит к следующей ошибке, а также к исходным ошибкам «название уже определено»:

[ERROR] XPath evaluation of "//element[@ref='xl:title']" results in empty target node
line 6 of titleElementAttributeFixer.xjb

Предложения, чтобы заставить его работать?

РЕДАКТИРОВАТЬ: как предположил холдердароча, мое выражение было неправильным. Я новичок в XML и XPath, и это немного сбивает с толку, поскольку элемент не имеет пространства имен «xs:», введенного явно. После того, как я исправил эту ошибку, я получил еще одну:

[ERROR] XPath evaluation of "//xs:element[@ref='xl:title']" results in too many (3) target nodes

Поскольку все атрибуты «ref» необходимо обновить, я поместил тег «multiple='true'» в привязку. Теперь я получаю следующую ошибку и не могу понять, как ее решить:

[ERROR] cvc-complex-type.3.2.2: Attribute 'ref' is not allowed to appear in element 'jxb:property'.

Идеи для этого? Я хочу привязать содержимое атрибута ref для рассматриваемого элемента к другому имени.


person mruis    schedule 30.06.2014    source источник


Ответы (2)


В конце концов, я решил проблему, применив эти вопросы SO:
JAXB не удается создать классы Java для XBRL
JAXB XJC Два объявления вызывают коллизию. Индивидуальная привязка не может быть соблюдена

Итак, после того, как я решил исходную проблему, у меня возникли дополнительные проблемы с объектными коллизиями, которые я также исправил. Вот так в целом выглядит мой рабочий bindings.xjb:

<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
version="2.1">

    <bindings schemaLocation="http://www.xbrl.org/2003/xl-2003-12-31.xsd" 
        node="//xsd:schema//xsd:element[@name='title']">
        <property name="xlTitle"/>
    </bindings>

    <bindings schemaLocation="<local_dimension_file_D002>.xsd"
        node="//xsd:schema//xsd:element[@name='AcceleratedDepreciation']"> 
        <factoryMethod name="AcceleratedDepreciationD002"/>
    </bindings>

    ...many more objectfactory collisions solved...
</bindings>

Я надеюсь, что это поможет другим новичкам в XBRL/XML/JAXB начать работу.

person mruis    schedule 01.07.2014
comment
У вас все еще есть часть коллизий фабрики объектов? Не могли бы вы поделиться? Попытка разобрать xbrl с помощью xjc - person linuxunil; 08.11.2019

Ваше выражение XPath неверно. XML-код привязки объявляет префикс xs для уточнения всех элементов XML-схемы, но выражение XPath пытается найти элемент element из пространства без имен, поскольку он не квалифицирован.

Вы должны использовать:

<jxb:bindings node="//xs:element[@ref='xl:title']">
    <jxb:property ref="xl:titleElement"/>
</jxb:bindings>
person helderdarocha    schedule 30.06.2014
comment
Это решило исходную проблему, однако схему по-прежнему нельзя проанализировать, поскольку я столкнулся с другой проблемой. У вас есть идеи для этого? - person mruis; 30.06.2014