几个小时后,我无法为多个 xrbl XSD 创建 Java stub 。遗留文件似乎有问题。然后,每次您尝试自定义 xjc 输出时:
[ERROR] XPath evaluation of "schema" results in empty target node
line 4 of file:/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] XPath evaluation of "schema" results in empty target node
line 4 of file:/C:/Users/Carlos%20Conti/Desktop/ipp/2008/bindings.xml
我尝试构建 java 类的文件相当大。抱歉,但我也无法链接它。但主要问题来自该文件内导入的 xsd (xl-2003-12-31.xsd),可以在 here 中找到该文件。 :
所以这应该足以解决问题。
我很确定这是我遗漏的一个小细节,但我无法理解。
非常欢迎任何建议。
最佳答案
在我看来,命名空间有问题。
XPath 表达式:
//complexType[@name='locatorType']//sequence/element[@ref='xl:title']
到处都有空前缀,但范围内似乎没有默认 namespace 。因此,除非 XJC 提供并记录默认 namespace ,否则这意味着上述 XPath 表达式将返回空序列。事实上,XML 模式元素位于 XML 模式命名空间中。您还可以在 XBRL 的 XLink 架构(提供的链接)中看到这一点,因为即使它不使用前缀,它也有一个默认的命名空间绑定(bind):
xmlns="http://www.w3.org/2001/XMLSchema"
由于自定义文件中的根元素将此命名空间绑定(bind)到 xsd
前缀,因此此 XPath 表达式可能会更好地工作:
//xsd:complexType[@name='locatorType']//xsd:sequence/xsd:element[@ref='xl:title']
这同样适用于上面的行:node="schema"
可能应该替换为 node="xsd:schema"
。
要记住的最重要的事情是前缀(或缺少前缀)并不重要,只有命名空间才重要:
- 绑定(bind)到两个不同文件中的两个不同命名空间的前缀不会与其自身匹配。
- 但是,绑定(bind)到同一命名空间的两个前缀将会匹配。
关于java - XJC : Creating Stub for XBRL schemas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446402/