代码之家  ›  专栏  ›  技术社区  ›  The Impaler

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

  •  1
  • The Impaler  · 技术社区  · 6 年前

    它越来越容易出错,我不喜欢它。我可以将通用标记存储在第三个单独的XSD中吗?

    我有两个XSD文件共享大多数标记定义(38个标记)。每个文件都有其他唯一的标记(1个标记和2个标记),因此文件分别有39个标记(38+1)和40个标记(38+2)。

    每次我编辑一个通用标记时,我都需要确保对两个文件进行相同的更改的方式完全相同…这已经不太容易了。

    我想知道是否可以将公共标签存储在第三个“公共”XSD中,并不知何故在两个主文件中“包含”它们。

    这是我的[简化]案例:

    • 文件“.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 回复  |  直到 6 年前
        1
  •  1
  •   Spyros K    6 年前

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

    示例如下: Example

    根据刺穿者的评论进行更新: 这个 include 标签必须是 先到位 在XSD的自定义标记之前。有效的方法是移动 包括 到XSD的顶部。 此外,在使用JAXB时,需要实现 LSResourceResolver 和一个 LSInput 要解析“外部”公共XSD资源文件,它实际上位于应用程序的单个JAR文件中。