如何使 xsd 元素扩展另一个元素

发布于 2024-11-20 00:24:29 字数 1423 浏览 3 评论 0原文

我有三个不同的 XML 元素,它们具有一些通用标签。

例如:人有姓名、年龄、性别

然后我有经理、员工,它们将共享该人拥有的三个字段,加上经理、员工特定字段,如 managerNo、employeeNo 等。

我可以在 xsd 中编写如下内容吗:

<强>1。声明 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 中,这样我就可以声明一个基本元素,然后扩展该基本元素,以便其他子元素也继承基本元素的属性。

I have three different XML elements that have some common tags.

For e.g: Person has name, age, sex

Then I have Manager, Employee that would share the three fields the Person has plus Manager, Employee specific fields like managerNo, employeeNo etc.

Can I write something in xsd that would be like this:

1. Declare Person element

<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. Use the above Person declaration and extend the Manager element:

<xsd:element name="Manager" extends="tns:Person"> (just idea of what I am looking for)

In effect, I am trying to mimic my schema definition as per Java (object oriented) inheritance like:

public class Person {
   String name;
   int age;

   // getters and setters for above variables go here
}

then do:

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
}

I want to mimic this Java inheritance concept in the xsd such that I can declare one base element, and just extend that base element such that other child elements also inherit the properties of base element.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弱骨蛰伏 2024-11-27 00:24:29

使用:

<xs:extension base="AddressType"> 

只需在您的 Manager/Employye 模式定义中

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

Simply use:

<xs:extension base="AddressType"> 

in your Manager/Employye schema definition

<xs:complexType name="Manager">
    <xs:complexContent>
        <xs:extension base="Person"> 
            <xs:sequence>
                <!-- Properties -->
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文