2010-04-13 57 views
3

我在驗證我的xml模式時遇到問題。驗證具有空屬性的XML模式

我得到的架構這些錯誤

113:18個S4S-ELT-無效-content.1:本 內容 '#AnonType_user' 是 無效。

164:17 s4s-elt-invalid-content.1:'#AnonType_festival'的 內容爲 無效。元素「序列」爲 無效,錯位或經常發生 。

和因爲這兩個錯誤,我得到的負載相同的錯誤。這是監守節日標籤的id屬性可能爲空監守沒有爲節日

CVC-數據類型,數據valid.1.2.1:「」不是一個 有效值「整數」。

CVC-attribute.3:ID「 屬性的「」上元素「節值」」 是不會相對於其類型, 有效「整數」。

在架構中造成問題的線是

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

這是從我的XML文件中的一個片段。一個用戶有一個節日和其他沒有

<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>[email protected]</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>[email protected]</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>[email protected]</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> 

回答

3

這是一個有效的模式:

<?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>標籤已被放錯位置

您還有一個輸入錯誤的地方,而不是將其用作<attribute>標記的屬性