EDIT: I've tried the recommended regular expression in the id attribute, but am now getting the following error when I try to validate the XSD file: "Error at line 7: Element schema has extra content: element"
Here is the code in question:
<xs:attribute name="id" type="xs:ID" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:patterrn value="[X|Y][0-9]{3}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
If I switch it back to the following code it validates just fine:
<xs:attribute name="id" type="xs:ID" use="required"/>
Full XML file:
<?xml version="1.0" encoding="UTF-8"?>
<presentations xmlns="http://www.brett.com/presentations"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.brett.com/presentations presentations.xsd"
>
<presentation date="2013-07-31" length="PT30M">
<topic genre="Music">PianoML</topic>
<presenters>
<name title="Mr." id="Y258">
<first>Elvis</first>
<middle>A</middle>
<last>Presley </last>
</name>
<name title="Miss" id="X365">
<first>Lady</first>
<last>Gaga</last>
</name>
</presenters>
</presentation>
<presentation date="2013-08-05" length="PT35M">
<topic genre="Science">AlienML</topic>
<presenters>
<name title="Mr." id="Y007">
<first>Will</first>
<last>Smith</last>
</name>
<name title="Mr." id="Y360">
<first>Tommy</first>
<first>Lee</first>
<last>Jones</last>
</name>
</presenters>
</presentation>
</presentations>
Full XSD file:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.brett.com/presentations"
targetNamespace="http://www.brett.com/presentations"
elementFormDefault="qualified">
<xs:element name="presentations">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="presentation"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="presentation">
<xs:complexType>
<xs:sequence>
<xs:element ref="topic"/>
<xs:element ref="presenters"/>
</xs:sequence>
<xs:attribute name="date" type="xs:date" use="required"/>
<xs:attribute name="length" type="xs:duration" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="topic">
<xs:complexType>
<xs:attribute name="genre" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="ART"/>
<xs:enumeration value="Music"/>
<xs:enumeration value="Science"/>
<xs:enumeration value="Technology"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="presenters">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element ref="first"/>
</xs:sequence>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element ref="middle"/>
</xs:sequence>
<xs:element ref="last"/>
</xs:sequence>
<!-- New changes -->
<xs:attribute name="id" type="xs:ID" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:patterrn value="[X|Y][0-9]{3}"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="title" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Mr."/>
<xs:enumeration value="Mrs."/>
<xs:enumeration value="Ms."/>
<xs:enumeration value="Miss"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="first" type="xs:string"/>
<xs:element name="middle" type="xs:string"/>
<xs:element name="last" type="xs:string"/>
</xs:schema>
The regular expressions in XSD's is slightly different, there is a nice article about it here XML Schema Regular Expressions
What you want is as below.
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[X|Y][0-9]{3}" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
Answer for after EDIT: Below is what you need, note that the xs:ID is on the restriction and not the attribute.
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:ID">
<xs:pattern value="[X|Y][0-9]{3}" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.