现有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中为一个属性指定属性命名空间?
答案 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>