したがって、の検証に使用する必要があるXSDファイルは次のとおりです。子の必須属性を親の派生型(XSD)から制限する
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="schedule"
xmlns="schedule"
elementFormDefault="qualified">
<xsd:element name="Schedule">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="Event" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Event and eventType declaration-->
<xsd:element name="Event" type="eventType"/>
<xsd:complexType name="eventType">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string" />
<xsd:element name="Lecture" type="lectureType" maxOccurs="9" minOccurs="1" />
</xsd:sequence>
</xsd:complexType>
<!-- default data that a lecture must contain -->
<xsd:group name="lectureContentGroup">
<xsd:sequence>
<xsd:element name="Day">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Monday"/>
<xsd:enumeration value="Tuesday"/>
<xsd:enumeration value="Wednesday"/>
<xsd:enumeration value="Thursday"/>
<xsd:enumeration value="Friday"/>
<xsd:enumeration value="Saturday"/>
<xsd:enumeration value="Sunday"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Time">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9][0-9][:][0-9][0-9][\-][0-9][0-9][:][0-9][0-9]"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:group>
<!-- base lecture type without any attributes -->
<xsd:complexType name="baseLectureType">
<xsd:group ref="lectureContentGroup" />
</xsd:complexType>
<!-- lecture type that contains the required attribute Classroom -->
<xsd:complexType name="lectureType">
<xsd:complexContent>
<xsd:extension base="baseLectureType">
<xsd:group ref="lectureContentGroup" />
<xsd:attribute name="Classroom" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="7"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!-- lecture type that contains a prohibited Classroom attribute -->
<xsd:complexType name="labLectureType">
<xsd:complexContent>
<xsd:extension base="baseLectureType">
<xsd:group ref="lectureContentGroup" />
<xsd:attribute name="Classroom" use="prohibited">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="7"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!-- lessonType, seminarType and labType declaration -->
<xsd:complexType name="lessonType">
<xsd:complexContent>
<xsd:extension base="eventType">
<xsd:sequence>
<xsd:element name="Professor" type="xsd:string" />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="seminarType">
<xsd:complexContent>
<xsd:restriction base="eventType">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string" />
<xsd:element name="Lecture" type="lectureType" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="labType">
<xsd:complexContent>
<xsd:restriction base="eventType">
<xsd:sequence>
<xsd:element name="Title" type="xsd:string" />
<xsd:element name="Lecture" type="labLectureType" maxOccurs="9" minOccurs="1" />
</xsd:sequence>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
<!-- Lesson, Seminar, Lab -->
<xsd:element name="Lesson" type="lessonType" substitutionGroup="Event" />
<xsd:element name="Seminar" type="seminarType" substitutionGroup="Event" />
<xsd:element name="Lab" type="labType" substitutionGroup="Event" />
</xsd:schema>
まずは少し説明します。 Ι( "eventType"型の)複数のEvent要素を含むことができるSchedule要素を定義しました。
レッスン教授要素を含まなければならない
セミナーは一の講義要素
を含める必要がありますように、またIは、要素の要素イベント(置換基)の置換レッスン、セミナーやラボを定義していますLab要素の講義にClassroom属性(禁止)を含めることはできません。それ以外の場合は教室が必要です。
私は最後のものに問題があります。必要な教室の属性と
が含まれていlectureType:基本的に私は要素のみの講義のニーズが含まれている講義(baseLectureType)の基本型を作成している、と私はここから2つの他のタイプを導出し、それを解決するために私が検証しようとすると、禁止教室属性
が含まれてい
labLectureTypeはしかし、私は、次のエラーを取得:
エラー - 109行目、37行目:org.xml.sax.SAXParseException; lineNumber:109; columnNumber:37; rcase-Recurse.2:粒子間の完全な機能マッピングはありません。 エラー - 109行目、37行目:org.xml.sax.SAXParseException; lineNumber:109; columnNumber:37; derivation-ok-restriction.5.4.2: 'labType'タイプのエラー。このタイプの粒子は、塩基の粒子の有効な制限ではない。
ヒントがあれば幸いです。
実際には全く解決策はありませんか?なぜなら、私はそれを集めるので、唯一の方法は、これを機能させるために、必要ではなく、最初の場所で「Classroom」属性をオプションにすることです。 – TheDillo