validating an XML schema with empty attributes

我的未来我决定 提交于 2019-11-30 23:38:47

This is a valid schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:simpleType name="postcode">
        <xs:restriction base="xs:string">
            <xs:minLength value="6"/>
            <xs:maxLength value="8"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="telephone">
        <xs:restriction base="xs:string">
            <xs:minLength value="10"/>
            <xs:maxLength value="13"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="mobile">
        <xs:restriction base="xs:string">
            <xs:minLength value="11"/>
            <xs:maxLength value="11"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="password">
        <xs:restriction base="xs:string">
            <xs:minLength value="32"/>
            <xs:maxLength value="32"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="userlevel">
        <xs:restriction base="xs:integer">
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="county">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Bedfordshire"/>
            <xs:enumeration value="Berkshire"/>
            <xs:enumeration value="Bristol"/>
            <xs:enumeration value="Buckinghamshire"/>
            <xs:enumeration value="Cambridgeshire"/>
            <xs:enumeration value="Cheshire"/>
            <xs:enumeration value="Cleveland"/>
            <xs:enumeration value="Cornwall"/>
            <xs:enumeration value="Cumberland"/>
            <xs:enumeration value="Derbyshire"/>
            <xs:enumeration value="Devon"/>
            <xs:enumeration value="Dorset"/>
            <xs:enumeration value="Durham"/>
            <xs:enumeration value="East Ridings Of Yorkshire"/>
            <xs:enumeration value="Essex"/>
            <xs:enumeration value="Gloucestershire"/>
            <xs:enumeration value="Hampshire"/>
            <xs:enumeration value="Herefordshire"/>
            <xs:enumeration value="Hertfordshire"/>
            <xs:enumeration value="Huntingdonshire"/>
            <xs:enumeration value="Isle Of Man"/>
            <xs:enumeration value="Kent"/>
            <xs:enumeration value="Lancashire"/>
            <xs:enumeration value="Leicestershire"/>
            <xs:enumeration value="Lincolnshire"/>
            <xs:enumeration value="London"/>
            <xs:enumeration value="Middlesex"/>
            <xs:enumeration value="Norfolk"/>
            <xs:enumeration value="North Yorkshire"/>
            <xs:enumeration value="Northamptonshire"/>
            <xs:enumeration value="Northumberland"/>
            <xs:enumeration value="Nottinghamshire"/>
            <xs:enumeration value="Oxfordshire"/>
            <xs:enumeration value="Rutland"/>
            <xs:enumeration value="Shropshire"/>
            <xs:enumeration value="Somerset"/>
            <xs:enumeration value="South Yorkshire"/>
            <xs:enumeration value="Staffordshire"/>
            <xs:enumeration value="Suffolk"/>
            <xs:enumeration value="Surrey"/>
            <xs:enumeration value="Sussex"/>
            <xs:enumeration value="Tyne and Wear"/>
            <xs:enumeration value="Warwickshire"/>
            <xs:enumeration value="West Yorkshire"/>
            <xs:enumeration value="Westmorland"/>
            <xs:enumeration value="Wiltshire"/>
            <xs:enumeration value="Wirral"/>
            <xs:enumeration value="Worcestershire"/>
            <xs:enumeration value="Yorkshire"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="folktask">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="member"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="member">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="user" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="festival" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="user">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="personal"/>
                <xs:element ref="account"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="personal">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="name"/>
                <xs:element ref="sex"/>
                <xs:element ref="address1"/>
                <xs:element ref="address2"/>
                <xs:element ref="city"/>
                <xs:element ref="county"/>
                <xs:element ref="postcode"/>
                <xs:element ref="telephone"/>
                <xs:element ref="mobile"/>
                <xs:element ref="email"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="sex" type="xs:string"/>
    <xs:element name="address1" type="xs:string"/>
    <xs:element name="address2" type="xs:string"/>
    <xs:element name="city" type="xs:string"/>
    <xs:element name="county" type="xs:string"/>
    <xs:element name="postcode" type="postcode"/>
    <xs:element name="telephone" type="telephone"/>
    <xs:element name="mobile" type="mobile"/>
    <xs:element name="email" type="xs:string"/>
    <xs:element name="account">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="username"/>
                <xs:element ref="password"/>
                <xs:element ref="userlevel"/>
                <xs:element ref="signupdate"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="username" type="xs:string"/>
    <xs:element name="password" type="password"/>
    <xs:element name="userlevel" type="userlevel"/>
    <xs:element name="signupdate" type="xs:dateTime"/>
    <xs:element name="festival">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="event"/>
                <xs:element ref="contact"/>
            </xs:sequence>
            <xs:attribute name="id" type="xs:integer" use="optional"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="event">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="eventname"/>
                <xs:element ref="url"/>
                <xs:element ref="datefrom"/>
                <xs:element ref="dateto"/>
                <xs:element ref="location"/>
                <xs:element ref="eventpostcode"/>
                <xs:element ref="coords"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="eventname" type="xs:string"/>
    <xs:element name="url" type="xs:string"/>
    <xs:element name="datefrom" type="xs:date"/>
    <xs:element name="dateto" type="xs:date"/>
    <xs:element name="location" type="xs:string"/>
    <xs:element name="eventpostcode" type="postcode"/>
    <xs:element name="coords">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="lat"/>
                <xs:element ref="lng"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="lat" type="xs:decimal"/>
    <xs:element name="lng" type="xs:decimal"/>
    <xs:element name="contact">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="conname"/>
                <xs:element ref="conaddress1"/>
                <xs:element ref="conaddress2"/>
                <xs:element ref="concity"/>
                <xs:element ref="concounty"/>
                <xs:element ref="conpostcode"/>
                <xs:element ref="contelephone"/>
                <xs:element ref="conmobile"/>
                <xs:element ref="fax"/>
                <xs:element ref="conemail"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="conname" type="xs:string"/>
    <xs:element name="conaddress1" type="xs:string"/>
    <xs:element name="conaddress2" type="xs:string"/>
    <xs:element name="concity" type="xs:string"/>
    <xs:element name="concounty" type="xs:string"/>
    <xs:element name="conpostcode" type="postcode"/>
    <xs:element name="contelephone" type="telephone"/>
    <xs:element name="conmobile" type="mobile"/>
    <xs:element name="fax" type="telephone"/>
    <xs:element name="conemail" type="xs:string"/>
</xs:schema>

Explanation:

The <sequence> tag had been misplaced

You also had a typo where you wrote user instead of use as an attribute to an <attribute> tag

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!