多个元素在xsd模式中有很多共同点

时间:2012-03-16 16:09:19

标签: xml data-binding xsd jaxb

如果我在xsd中有很多复杂类型,例如它有一些常见字段,比如'id','name','date'或'anyspecificId',这意味着那些类型相当彼此相似,再次为每个人添加一个共同字段将是一场噩梦。是否可以为复杂类型定义一些基类型,以便这种复杂类型可以扩展基本父类型的字段/项? 在这种情况下,我只是将这个新字段添加到基本类型,而不是每个子字段。 这可能吗?

2 个答案:

答案 0 :(得分:2)

当然你应该使用类型扩展名:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="fullpersoninfo">
  <xs:complexContent>
    <xs:extension base="personinfo">
      <xs:sequence>
        <xs:element name="address" type="xs:string"/>
        <xs:element name="city" type="xs:string"/>
        <xs:element name="country" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

</xs:schema>

http://www.w3schools.com/schema/el_extension.asp

答案 1 :(得分:2)

通过扩展来推导类型肯定是解决这个问题的一种方法。另一种有时可以更好地工作的方法是使用命名模型组。这可以更灵活,例如它不会强加公共元素必须在自定义元素之前出现的约束。