它容易出错,我不喜欢它。我可以将通用标签存储在第三个单独的XSD中吗?
我有两个XSD文件,它们共享大多数标签定义(38个标签)。每个文件具有其他唯一标签(1个标签和2个标签),因此文件分别具有39个标签(38 + 1)和40个标签(38 + 2)。
每次编辑一个公共标签时,我都需要确保以完全相同的方式对两个文件进行相同的更改...这已经不那么容易了。
我想知道是否可以将公用标签存储在第三个“公用” XSD中,并以某种方式“包含”在两个主文件中。
这是我的[简化]案例:
文件“ a.xsd”:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="generation-model">
<xsd:attribute name="base-dir" type="xsd:string" use="required" />
</xsd:complexType>
<!-- +38 common tags here -->
</xsd:schema>
文件“ b.xsd”:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="main-unit">
<xsd:attribute name="identifier" type="xsd:string" use="required" />
</xsd:complexType>
<xsd:complexType name="set">
<xsd:attribute name="value" type="xsd:string" use="required" />
</xsd:complexType>
<!-- +38 common tags here -->
</xsd:schema>
无论如何,在紧急情况下(如果无法执行此操作),我正在考虑仅串联文件片段。丑陋,但我想会起作用。
答案 0 :(得分:1)
您可以创建第三个XSD文件,该文件存储公用元素。然后,您可以使用Xsd Import或XSD Include将公共元素添加到单独的两个文件中。 如果使用相同的名称空间,则应使用XSD Include。对于不同的名称空间,xsd导入是合适的。
此处提供示例:Example
根据The Impaler的评论进行更新:
include
标签必须在XSD的自定义标签之前先放置。一种有效的方法是将include
移动到XSD的顶部。
同样,在使用JAXB时,需要实现LSResourceResolver
和LSInput
来解析“外部”公共XSD资源文件,该文件实际上位于应用程序的单个JAR文件中。