Web开发|XML Schema (XSD) 学习

发布时间 2023-04-09 19:03:37作者: Weltㅤ

采用XSD建立教师、学生之间的关系。

假设有两个实体“学生”和“教师”,一个学生可以有多个老师,一个老师也可以有多个学生,二者为多对多的关系。在XSD中描述多对多的关系可以使用XML元素的引用和复杂类型的组合,使用中间表(或连接表)来表示多对多关系。

首先,我们定义“学生”和“教师”两个元素:

<xs:element name="student" type="studentType"/>
<xs:element name="teacher" type="teacherType"/>

然后,我们定义“中间表”元素,其中包含“学生ID”和“课程ID”属性:

<xs:element name="student_teacher">
 <xs:complexType name="studentTeacherType">
    <xs:sequence>
      <xs:element ref="student"/>
      <xs:element ref="teacher"/>
    </xs:sequence>
 </xs:complexType>
</xs:element>

接下来,我们使用XML元素的引用来建立“学生”和“课程”与“中间表”之间的关系:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:element name="student" type="studentType"/>
  <xs:element name="teacher" type="teacherType"/>
  <xs:element name="student_teacher" type="studentTeacherType"/>
  <xs:complexType name="studentType">
    <xs:sequence>
      <xs:element name="id" type="xs:integer"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="teachers" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:attribute ref="xs:id"/>
          <xs:attribute ref="xs:name"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="teacherType">
    <xs:sequence>
      <xs:element name="id" type="xs:integer"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="students" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:attribute ref="xs:id"/>
          <xs:attribute ref="xs:name"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="studentTeacherType">
    <xs:sequence>
      <xs:element ref="student"/>
      <xs:element ref="teacher"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

三者间的关系可视化如下:

img