2017-11-16 7 views
0

다음은 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'유형의 오류. 유형의 입자는 기본 입자의 유효한 제한이 아닙니다.

팁을 주시면 감사하겠습니다.

답변

1

XSD 확장자 만 추가; XSD 제한 만 제거됩니다.

그러나 제한 사항은 필수 요소 또는 속성의 필요성을 취소 할 수 없습니다.

XSD 1.1에서는 어설 션을 사용하여 형식을 더 세밀하게 제어 할 수 있지만 어설 션이 있더라도 필수 요소 나 특성을 금지 (또는 선택 사항) 할 수 없습니다.

+0

그래서 전혀 해결책이 전혀 없습니까? 왜냐하면 내가 모으는 한, 유일한 방법은 "Classroom"속성을 필수 대신에 선택 사항으로 지정하여이 작업을 수행하는 것입니다. – TheDillo