2014-11-20 45 views
0

我曾在這超過2周,現在我不能找到一個解決方案來限制屬性或元素.... :(如何使用派生類型

我有這個XSD文件,我想提出三點派生類型從具有某些相同特徵的eventType開始,但是:可以添加Professor元素的lessonType, seminarType只有一個Lecture元素,labType不具有屬性教室。 我有這個xsd代碼,但它似乎沒有做我想要的...

<xsd:element name="Event" type="eventType"/> 
<!-- global declaration of elements Lesson, 
    Seminar, Lab that are equivalent 
    lessonType, seminarType, labType--> 
<!-- Substitution group for Event--> 
<xsd:element name="Lesson" 
      substitutionGroup="Event" 
      type="lessonType"/> 
<xsd:element name="Seminar" 
      substitutionGroup="Event" 
      type="seminarType"/> 
<xsd:element name="Lab" 
      substitutionGroup="Event" 
      type="labType"/> 
<!--end of global declaration of elements Lesson, 
    Seminar, Lab--> 
<!-- End of Substitution group for Event--> 

<xsd:attribute name="Classroom"> 
    <xsd:simpleType> 
    <xsd:restriction base="xsd:string"> 
     <xsd:maxLength value="4"/> 
    </xsd:restriction> 
    </xsd:simpleType> 
</xsd:attribute> 

<xsd:complexType name="eventType"> 
    <xsd:sequence> 
    <xsd:element name="Title" 
       type="xsd:string"/> 
    <xsd:element maxOccurs="5" 
       minOccurs="0" 
       name="Lecture"> 
     <xsd:complexType> 
     <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]{2}:[0-9]{2}\-[0-9]{2}:[0-9]{2}"/> 
       </xsd:restriction> 
      </xsd:simpleType> 
      </xsd:element> 
     </xsd:sequence> 
     <xsd:attribute name="Classroom"> 
      <xsd:simpleType> 
      <xsd:restriction base="xsd:string"> 
       <xsd:maxLength value="4"/> 
      </xsd:restriction> 
      </xsd:simpleType> 
     </xsd:attribute> 
     </xsd:complexType> 
    </xsd:element> 
    </xsd:sequence> 
</xsd:complexType> 

<!--extension lessonType of eventType --> 
<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> 
<!--end of lessonType--> 

<!--extension seminarType of eventType --> 
<xsd:complexType name="seminarType"> 
    <xsd:complexContent> 
    <xsd:extension base="eventType"> 
     <xsd:sequence> 
     <xsd:element name="Lecture" maxOccurs="1" minOccurs="0" /> 
     </xsd:sequence> 
    </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 
<!--end of seminarType--> 

<!--extension labType of eventType --> 
<xsd:complexType name="labType"> 
    <xsd:complexContent> 
    <xsd:extension base="eventType"> 
     <xsd:attribute name="Classroom" use="prohibited"/> 
    </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 
<!--end of labType--> 

<xsd:element name="Schedule"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element maxOccurs="unbounded" 
        ref="Event"/> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

不應該是VA的XML文件蓋子下面的 - 但它是由架構所接受... :(

<Schedule xsi:schemaLocation="schedule schedule9.xsd" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="schedule"> 
    <Lesson> 
    <Title>Artificial Intelligence</Title> 
    <Lecture Classroom="BA"> 
     <Day>Wednesday</Day> 
     <Time>09:00-11:00</Time> 
    </Lecture> 
    <Lecture Classroom="BA"> 
     <Day>Thursday</Day> 
     <Time>09:00-11:00</Time> 
    </Lecture> 
    <Professor>Hatzilygeroudis</Professor> 
    </Lesson> 
    <Lab> 
    <Title>Artificial Intelligence</Title> 
    <Lecture Classroom="BA">  
     <Day>Friday</Day> 
     <Time>17:00-18:00</Time> 
    </Lecture>         
    </Lab> 
    <Seminar> 
    <Title>Constraint Satisfaction Problems</Title> 
    <Lecture Classroom="B3"> 
     <Day>Monday</Day> 
     <Time>19:00-21:00</Time> 
    </Lecture> 
    </Seminar>    
    <Lesson> 
    <Title>Knowledge Representation in Web</Title> 
    <Lecture Classroom="P200"> 
     <Day>Friday</Day> 
     <Time>15:00-17:00</Time> 
    </Lecture> 
    <Professor>Hatzilygeroudis</Professor> 
    </Lesson> 
</Schedule> 

我該怎麼辦錯了????

回答

1

如果seminarType的目的是將Lecture元素限制到一個單一的外觀,而不是由EventType允許五個,那麼你要聲明seminarTypeEventType的限制,而不是作爲一個擴展。

如果labType目的是禁止對兒童Lecture元素Classroom屬性,那麼它也必須是有限制的,不是一個擴展,你會發現它的幫助,以便爲Lecture定義的複雜類型元素是頂級命名複雜類型。

閱讀XSD限制,然後重試。你離成功不遠。