我很难尝试为我的xml创建验证。 这是我的Schema.xsd:
UITableViewDataSource
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<!-- Schema namespace -->
<xs:schema
targetNamespace="http://tempuri.org/myschema/unique"
elementFormDefault="qualified"
xmlns="http://tempuri.org/myschema/unique"
xmlns:mstns="http://tempuri.org/myschema/unique"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Root element -->
<xs:element name="schedule">
<xs:complexType>
<xs:sequence>
<!-- Student element -->
<xs:element name="student">
<xs:complexType>
<xs:attribute name="studentName" use="required"/>
<xs:attribute name="studentId" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
<!-- School element -->
<xs:element name="school">
<xs:complexType>
<xs:sequence>
<xs:element name="name" minOccurs="0"/>
<xs:element name="term"/>
<xs:element name="program" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Weekdays element - uses clasTemplate -->
<xs:element name="weekdays">
<xs:complexType>
<xs:sequence>
<xs:element name="day" minOccurs="5" maxOccurs="5" type="dayTemplate"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<!-- Set unique week day -->
<xs:unique name="uniqWeekday">
<xs:selector xpath="*/mstns:day"/>
<xs:field xpath="@weekday"/>
</xs:unique>
<!--Set unique week day-->
<xs:unique name="uniqHourofclass">
<xs:selector xpath="*/mstns:class"/>
<xs:field xpath="@classHour"/>
</xs:unique>
</xs:element>
<!-- ******************* Templates ******************* -->
<!-- Day Template -->
<xs:complexType name="dayTemplate">
<xs:sequence>
<xs:element name="class" minOccurs="0" maxOccurs="13" type="classTemplate"/>
</xs:sequence>
<xs:attribute name="weekday" type="weekdayOptions" use="required"/>
</xs:complexType>
<!-- Class Template -->
<xs:complexType name="classTemplate">
<xs:sequence>
<xs:element name="courseCode" type="xs:string"/>
<xs:element name="classRoom" type="xs:string"/>
</xs:sequence>
<xs:attribute name="classHour" type="hourofclassOptions" use="required"/>
</xs:complexType>
<!-- ******************* Options ******************* -->
<!-- Hour-of-class Options -->
<xs:simpleType name="hourofclassOptions">
<xs:restriction base="xs:unsignedInt">
<xs:pattern value="(800|900|1[0-9][0]{2}|2000)"/>
</xs:restriction>
</xs:simpleType>
<!-- Week Day Options -->
<xs:simpleType name="weekdayOptions">
<xs:restriction base="xs:string">
<xs:enumeration value="Monday"/>
<xs:enumeration value="Tuesday"/>
<xs:enumeration value="Wednesday"/>
<xs:enumeration value="Thursday"/>
<xs:enumeration value="Friday"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
我需要验证classHour里面的类。我不能在同一天内同时上课,但我可以在不同的日子里有同一个班级。 我正在使用名称空间。 我怎样才能做到这一点?我做错了什么?
答案 0 :(得分:1)
如果要在P中定义,则每个Q应该具有R的唯一值,然后在P的定义中定义xs:unique
约束,其中xs:selector从P中选择Q,并且xs :field从Q中选择R.
将此应用于您的情况,因此需要在day
(P)内,每个class
(Q)应具有hour
(R)的唯一值的约束在day
的元素声明中。
答案 1 :(得分:1)
试试这个:
<!-- Root element -->
<xs:element name="schedule">
...
<!-- Weekdays element - uses clasTemplate -->
<xs:element name="weekdays">
<xs:complexType>
<xs:sequence>
<xs:element name="day" minOccurs="5" maxOccurs="5"type="dayTemplate">
<!--Set unique week day-->
<xs:unique name="uniqHourofclass">
<xs:selector xpath="mstns:class" />
<xs:field xpath="@classHour" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:element>
在这种情况下,<xs:unique>
约束位于<day>
下,因此在同一<day>
中,属性classHour
必须是唯一的(但可以在不同的{{}中重复1}})。
您尝试做的事情会影响<day>
下的所有内容,正如您所定义的那样:
<schedule>
因此,在这种情况下,它会影响<!-- Root element -->
<xs:element name="schedule">
...
<!--Set unique week day-->
<xs:unique name="uniqHourofclass">
<xs:selector xpath="mstns:weekdays/mstns:day/mstns:class"/>
<xs:field xpath="@classHour"/>
</xs:unique>
</xs:element>
下的所有classHour
,这意味着即使对于不同的<schedule>
,属性<day>
也必须是唯一的。