【问题标题】:How to specify an attribute namespace in XSD so that JAXB interprets it correctly?如何在 XSD 中指定属性名称空间以便 JAXB 正确解释它?
【发布时间】:2013-10-07 12:06:54
【问题描述】:

我对现有 XSD 中的属性名称空间有一个小问题。我必须修改此 XSD 才能使用第三方软件的所有功能。
我的目标是将元素与命名空间属性混合,如下所示:

<graphics type="RECTANGLE" cy:nodeLabel="Label 1" />

&lt;graphics&gt; 元素定义在默认命名空间中,属性cy:nodeLabel 在特定命名空间中。

目前,我在 XSD 中的属性定义如下所示:

<xsd:attribute name="nodeLabel" type="xsd:string" form="qualified" xmlns="http://www.cytoscape.org"/>

form="qualified" 选项强制 JAXB 使用 namespace="...." 注释 @XmlAttribute,但它采用默认命名空间,而不是 http://www.cytoscape.org。如果我在生成的 Java 类中手动更改它,则 XML 输出符合要求。

我想在 XSD 中定义属性命名空间,以便我可以依赖 JAXB(resp.xjc)来生成正确的 Java 类。
如何为 XSD 中的一个属性指定属性命名空间?

【问题讨论】:

    标签: java xml namespaces jaxb xsd


    【解决方案1】:

    单个xsd 文件只能定义一个single 命名空间。您需要一个 separate xsd,它定义了第二个命名空间,然后您将其导入原始 xsd(并相应地引用该属性)。

    【讨论】:

      【解决方案2】:

      感谢jtahlborn's answer,我找到了合适的解决方案:

      导入单独的 XSD:

      新文件cytoscape-additions.xsd

      <?xml version='1.0' encoding='UTF-8'?>
      <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.cytoscape.org" elementFormDefault="unqualified"
        attributeFormDefault="qualified">
      
        <!-- Cytoscape additions Graphics -->
        <xsd:attributeGroup name="cytoscape-addition-graphics">
          <xsd:attribute name="nodeLabel" type="xsd:string" form="qualified"
          xmlns="http://www.cytoscape.org" />
        </xsd:attributeGroup>
      </xsd:schema>
      

      来源:https://stackoverflow.com/a/12111103/32043

      【讨论】:

        猜你喜欢
        • 2010-10-26
        • 2015-01-18
        • 1970-01-01
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        相关资源
        最近更新 更多