如何从两个XSD文件外部化通用标签

时间:2018-07-28 14:25:49

标签: xml xsd

它容易出错,我不喜欢它。我可以将通用标签存储在第三个单独的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>
    

无论如何,在紧急情况下(如果无法执行此操作),我正在考虑仅串联文件片段。丑陋,但我想会起作用。

1 个答案:

答案 0 :(得分:1)

您可以创建第三个XSD文件,该文件存储公用元素。然后,您可以使用Xsd ImportXSD Include将公共元素添加到单独的两个文件中。 如果使用相同的名称空间,则应使用XSD Include。对于不同的名称空间,xsd导入是合适的。

此处提供示例:Example

根据The Impaler的评论进行更新: include标签必须在XSD的自定义标签之前先放置。一种有效的方法是将include移动到XSD的顶部。 同样,在使用JAXB时,需要实现LSResourceResolverLSInput来解析“外部”公共XSD资源文件,该文件实际上位于应用程序的单个JAR文件中。