1

我对现有 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 对@XmlAttributewith进行注释namespace="....",但它采用默认命名空间,而不是http://www.cytoscape.org。如果我在生成的 Java 类中手动更改它,则 XML 输出符合需要。

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

4

2 回答 2

3

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

于 2013-10-07T12:14:04.037 回答
0

感谢jtahlborn 的回答,我找到了合适的解决方案:

导入单独的 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

于 2013-10-07T12:19:38.153 回答