我现在工作了2个多星期,我找不到解决办法...... :(
我有这个XSD文件,我想从eventType中创建三个具有一些相同特征的派生类型,但是:可以添加一个教授元素的lessonType, seminarType tO只有一个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>
应该无效的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>
我做错了什么????
答案 0 :(得分:1)
如果seminarType
的目的是将Lecture
元素限制为单个外观,而不是EventType
允许的五个,那么您要将seminarType
声明为EventType
的限制,而不是扩展。
如果labType
的目的是禁止子Classroom
元素的Lecture
属性,那么它也需要是限制,而不是扩展,你会发现将为Lecture
元素定义的复杂类型设置为顶级命名复杂类型很有帮助。
阅读XSD限制,然后重试。你离成功不远了。