如何在XSD中指定属性名称空间,以便JAXB正确解释它?

时间:2013-10-07 12:06:55

标签: java xml namespaces jaxb xsd

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

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

<graphics>元素在默认命名空间中定义,即特定命名空间中的属性cy:nodeLabel

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

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

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

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

2 个答案:

答案 0 :(得分:3)

单个xsd文件只能定义单个命名空间。你需要一个单独的 xsd来定义第二个命名空间,然后将其导入到原始的xsd中(并相应地引用该属性)。

答案 1 :(得分:0)

感谢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