代码之家  ›  专栏  ›  技术社区  ›  AdRock

验证具有空属性的XML架构

  •  3
  • AdRock  · 技术社区  · 15 年前

    验证xml架构时遇到问题。

    113:18 s4s elt无效内容。1: “#AnonType_user”的内容是 无效。

    “AnonType#u festival”的内容是 无效的、放错地方的或发生过的 经常。

    由于这两个错误,我得到了同样的错误负荷。这是因为节日标签的属性id可能为空,因为没有该节日的数据

    cvc数据类型有效。1.2.1:“”不是 “integer”的有效值。

    cvc属性。3:的值“” 对于其类型无效,

    架构中导致问题的行是

    <xs:element name="user">
      <xs:complexType>
     <xs:attribute name="id" type="xs:integer"/>
       <xs:sequence>
      <xs:element ref="personal"/>
      <xs:element ref="account"/> 
       </xs:sequence>
      </xs:complexType>
    </xs:element>
    
    <xs:element name="festival">
      <xs:complexType>
     <xs:attribute name="id" type="xs:integer" user="optional"/>
      <xs:sequence>
       <xs:element ref="event"/>
       <xs:element ref="contact"/> 
     </xs:sequence>
      </xs:complexType>
    </xs:element>
    

    <member>
     <user id="3">
      <personal>
       <name>Skye Saunders</name>
       <sex>Female</sex>
       <address1>31 Anns Court</address1>
       <address2></address2>
       <city>Cirencester</city>
       <county>Gloucestershire</county>
       <postcode>GL7 1JG</postcode>
       <telephone>01958303514</telephone>
       <mobile>07260491667</mobile>
       <email>bigundecided@hotmail.co.uk</email>
      </personal>
      <account>
       <username>BigUndecided</username>
       <password>ea297847f80e046ca24a8621f4068594</password>
       <userlevel>2</userlevel>
       <signupdate>2010-03-26T09:23:50</signupdate>
      </account>
     </user>
     <festival id="">
      <event>
       <eventname></eventname>
       <url></url>
       <datefrom></datefrom>
       <dateto></dateto>
       <location></location>
       <eventpostcode></eventpostcode>
       <coords>
        <lat></lat>
        <lng></lng>
       </coords>
      </event>
      <contact>
       <conname></conname>
       <conaddress1></conaddress1>
       <conaddress2></conaddress2>
       <concity></concity>
       <concounty></concounty>
       <conpostcode></conpostcode>
       <contelephone></contelephone>
       <conmobile></conmobile>
       <fax></fax>
       <conemail></conemail>
      </contact>
     </festival>
    </member>
    <member>
     <user id="4">
      <personal>
       <name>Connor Lawson</name>
       <sex>Male</sex>
       <address1>12 Ash Way</address1>
       <address2></address2>
       <city>Swindon</city>
       <county>Wiltshire</county>
       <postcode>SN3  6GS</postcode>
       <telephone>01791928119</telephone>
       <mobile>07338695664</mobile>
       <email>itunestinker@fsmail.co.uk</email>
      </personal>
      <account>
       <username>iTuneStinker</username>
       <password>3a1f5fda21a07bfff20c41272bae7192</password>
       <userlevel>3</userlevel>
       <signupdate>2010-03-26T09:23:50</signupdate>
      </account>
     </user>
     <festival id="1">
      <event>
       <eventname>Oxford Folk Festival</eventname>
       <url>http://www.oxfordfolkfestival.com/</url>
       <datefrom>2010-04-07</datefrom>
       <dateto>2010-04-09</dateto>
       <location>Oxford</location>
       <eventpostcode>OX19BE</eventpostcode>
       <coords>
        <lat>51.735640</lat>
        <lng>-1.276136</lng>
       </coords>
      </event>
      <contact>
       <conname>Stuart Vincent</conname>
       <conaddress1>P.O. Box 642</conaddress1>
       <conaddress2></conaddress2>
       <concity>Oxford</concity>
       <concounty>Bedfordshire</concounty>
       <conpostcode>OX13BY</conpostcode>
       <contelephone>01865 79073</contelephone>
       <conmobile></conmobile>
       <fax></fax>
       <conemail>stewards@oxfordfolkfestival.com</conemail>
      </contact>
     </festival>
    </member>
    

    <?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:attribute name="id" type="xs:integer"/>
        <xs:sequence>
       <xs:element ref="personal"/>
       <xs:element ref="account"/> 
        </xs:sequence>
       </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:attribute name="id" type="xs:integer" user="optional"/>
       <xs:sequence>
        <xs:element ref="event"/>
        <xs:element ref="contact"/> 
      </xs:sequence>
       </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>
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   Yaneeve    15 年前

    <?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>
    

    说明:

    这个 <sequence>

    您还遇到了一个输入错误,您编写了user,而不是将其用作 <attribute>