XJC:为XBRL模式创建存根

时间:2017-01-03 15:03:37

标签: java xml xpath xsd xbrl

几个小时后,我无法为几个xrbl XSD创建Java存根。遗留文件似乎存在问题。然后,每次尝试自定义xjc输出时:

  

[ERROR]" schema"的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>

当我将此作为外部自定义包含时,会输出另一个错误:

  

[ERROR]&#34; schema&#34;的XPath评估导致空目标节点
  文件的第4行:/ C:/Users/Carlos%20Conti/Desktop/ipp/2008/bindings.xml

我试图从中构建java类的文件非常大。对不起,我也无法链接。主要问题来自该文件中导入的xsd(xl-2003-12-31.xsd),可以找到here

所以这应该是解决问题的足够信息。

我很确定这是一个我忽略的细节,但我无法通过。

非常欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

在我看来,命名空间有问题。

XPath表达式:

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

到处都有空前缀,但似乎没有默认命名空间在范围内。因此,除非XJC提供并记录默认命名空间,否则这意味着上面的XPath表达式将返回一个空序列。实际上,XML Schema元素位于XML Schema名称空间中。您还可以在XBRL的XLink架构(提供的链接)中看到这一点,因为即使它不使用前缀,它也有默认的命名空间绑定:

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"

最重要的是要记住前缀(或缺少前缀)无关紧要,只有命名空间才重要:

  • 绑定到两个不同文件中两个不同命名空间的前缀与自身不匹配。
  • 但是,绑定到同一名称空间的两个前缀将匹配。