несколько элементов имеет много общего в схеме xsd - PullRequest
1 голос
/ 16 марта 2012

Если у меня много сложных типов в xsd, который, например, имеет некоторое количество общих полей, таких как «id», или «name», или «date», или «anyspecificId», это означает, что эти типы довольнопохожи друг на друга, и было бы кошмарно снова добавить одно общее поле к каждому из них.Можно ли определить некоторый базовый тип для сложного типа, чтобы этот сложный тип расширял поля / элементы базового родительского типа?В этом случае я просто добавляю это новое поле к базовому типу, а не к каждому из дочерних.Это возможно?

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Получение типов по расширению, безусловно, является одним из способов решения этой проблемы. Другой подход, который иногда может работать лучше, состоит в использовании именованных групп моделей. Это может быть более гибким, например, оно не накладывает ограничения на то, что общие элементы должны предшествовать пользовательским элементам.

2 голосов
/ 16 марта 2012

Конечно, вы должны использовать расширение типа:

<?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

...