다음은 this xml의 유효성을 검사하는 데 사용해야하는 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"유형의) 여러 이벤트 요소를 포함 할 수있는 Schedule 요소를 정의했습니다.
수업은 교수의 요소를 포함해야
세미나는 하나 개의 강의 요소
를 포함해야합니다 그래서 또한 나는, 요소 요소의 이벤트 (대체 그룹)를 대체 수업, 세미나 및 연구소를 정의Lab 요소의 강의에는 Classroom 속성 (금지됨)이 포함되어서는 안됩니다. 다른 모든 경우에는 교실이 필요합니다.
나는 마지막 문제에 봉착했습니다. 필요한 교실 특성 및
포함lectureType : 기본적으로 I에서만 요소 강의 요구를 포함하는 강의 (baseLectureType)의 기본 형태를 만든 및 I이 (2)로부터 다른 종류의 유도해야 함을 해결 내가 유효성을 검사 할 때
그러나 금지 된 교실 속성을 포함
labLectureType, 나는 다음과 같은 오류를 얻을 :
,536,913,632 10오류 - 줄 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