我正在尝试使用Eclipse中的JAXB生成本地化的XBRL类,但是我遇到了错误:
[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
建议让它运作?
编辑:正如helderdarocha所说,我的表达是错误的。我是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'中的内容绑定到另一个名称。
答案 0 :(得分:1)
我通过应用这些SO问题解决了这个问题:
JAXB fails to generate Java classes for XBRL
JAXB XJC Two declarations cause a collision. Customized binding cannot be honored
所以在我解决了原始问题之后,我遇到了对象碰撞的其他问题,我也解决了这个问题。这就是我的工作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新手入门。
答案 1 :(得分:0)
您的XPath表达式不正确。您的绑定XML声明了xs
前缀来限定所有XML Schema元素,但是您的XPath表达式尝试从no-namespace中找到element
元素,因为它不合格。
您应该使用:
<jxb:bindings node="//xs:element[@ref='xl:title']">
<jxb:property ref="xl:titleElement"/>
</jxb:bindings>