jaxb xsd schemas重用

时间:2016-03-29 20:44:58

标签: java xml xsd jaxb

假设我有三个xsd架构:CommonSchema.xsd,A.xsd,B.xsd。 在CommonSchema.xsd中,我有一些要在A.xsd和B.xsd中重用的元素。 因为我想重用通过org.jvnet.jaxb2.maven2插件生成的代码。 我想在生成的java代码中得到类似的东西:

A extends CommonSchema {...}
B extends CommonSchema {...}

从A.java和B.java到CommonSchema.java的私人引用

这样做的最佳方法是什么? 提前致谢

1 个答案:

答案 0 :(得分:1)

像往常一样编写通用的XML Schema“com.xsd”。假设它包含复杂类型TypeCommon,其目标命名空间为“a:b”。然后,使用来自“com.xsd”的东西的另一个XML Schema文件将使用s.th.像

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:ns="a:b"
           targetNamespace="x:y">

    <xs:import schemaLocation="com.xsd" namespace="a:b"/>

    <xs:complexType name="TypeX2">
      <xs:sequence>
        <xs:element name="name" type="ns:TypeCommon"/>
      </xs:sequence>
    </xs:complexType>
</xs:schema>

类层次结构来自复杂的类型扩展,例如使用

<xs:complexType name="TypeA">
  <xs:complexContent>
    <xs:extension base="ns:TypeCommon">
    <xs:sequence>
      <xs:element name="foo" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="bar" type="xs:int" fixed="1"/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>