Как заставить элемент xsd расширять другой - PullRequest
4 голосов
/ 13 июля 2011

У меня есть три различных элемента XML, которые имеют некоторые общие теги.

Например, для: У лица есть имя, возраст, пол. Затем у меня есть менеджер, сотрудник, который разделит три поля, которыми обладает человек, плюс менеджер, сотрудник.конкретные поля, такие как managerNo, employeeNo и т. д.

Могу ли я написать что-то в xsd, которое будет выглядеть следующим образом

1.Элемент Declare Person

<xsd:element name="Person">
        <xsd:annotation>
            <xsd:documentation>Person Request</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>              
                <xsd:element name="personname" type="xsd:string" minOccurs="1" maxOccurs="1" /> 
                <xsd:element name="age" type="xsd:integer" minOccurs="1" maxOccurs="1" />   
            </xsd:sequence>
        </xsd:complexType>
</xsd:element>
  1. Используйте приведенную выше декларацию Person и расширьте элемент Manager:

(просто представление о том, что яищу)

По сути, я пытаюсь имитировать определение моей схемы согласно Java (объектно-ориентированному) наследованию, например:

public class Person {
   String name;
   int age;

   // getters and setters for above variables go here
}

, затем выполните:

public class Manager extends Person {
   int managerNo;
   String departmentName;
}

public class Employee extends Person {
   int employeeNo;
   String designation;

 // getters/setters and other code goes here
}

Я хочу имитировать эту концепцию наследования Java в xsd, чтобы я мог объявить один базовый элемент и просто расширить этот базовый элемент, чтобы другие дочерние элементы также наследовали свойства базового элемента.

Заранее спасибо.

1 Ответ

4 голосов
/ 13 июля 2011

Просто используйте:

<xs:extension base="AddressType"> 

в определении вашего менеджера / схемы Employye

<xs:complexType name="Manager">
    <xs:complexContent>
        <xs:extension base="Person"> 
            <xs:sequence>
                <!-- Properties -->
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
...