2017-11-16 12 views
0

したがって、​​の検証に使用する必要がある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'タイプのエラー。このタイプの粒子は、塩基の粒子の有効な制限ではない。

ヒントがあれば幸いです。

答えて

1

XSD 拡張子のみが追加されます。 XSD 制限のみが削除されます。

ただし、この制限は強制的な要素や属性の必要性を元に戻すことはできません。

XSD 1.1では、アサーションを使用して型を詳細に制御できましたが、アサーションがあっても必須の要素や属性を禁止(またはオプション)することはできませんでした。

+0

実際には全く解決策はありませんか?なぜなら、私はそれを集めるので、唯一の方法は、これを機能させるために、必要ではなく、最初の場所で「Classroom」属性をオプションにすることです。 – TheDillo

関連する問題