Frage

war Yaneeve so freundlich, mein Schema für mich zu beheben, was viele Probleme verursacht wurde

Dies ist nicht so sehr ein Problem, aber er wäre schön, diese Arbeit zu haben

Einige meiner Elemente sind leer wie eine Mobiltelefonnummer oder Faxnummer.

Ich brauche die Länge des Elements zu überprüfen, um sicherzustellen, sie die richtige Anzahl von Ziffern haben, aber ich mag nicht ein leeres Element validieren

  

CVC-minLength-gültig: Wert '' mit   Länge = ‚0‘ ist nicht facetten gültig   respektieren ‚11‘ für Typ minLength   'Mobile'.

     

CVC-type.3.1.3: Der Wert '' von   Element 'conmobile' ist nicht gültig.

Gibt es eine Möglichkeit ich ein leeres Element überspringen und zu validieren es nur, wenn es nicht leer ist?

Mein Beispiel Benutzer in der XML

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

und mein neues 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="5"/>
            <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>
War es hilfreich?

Lösung

ich es geschafft, es zu beheben, indem Sie

von diesem

geändert
<xs:simpleType name="telephone">
    <xs:restriction base="xs:string">
        <xs:minLength value="10"/>
        <xs:maxLength value="13"/>
    </xs:restriction>
</xs:simpleType>

<xs:simpleType name="telephone">
  <xs:union>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:minLength value="10"/>
        <xs:maxLength value="13"/>
      </xs:restriction>
    </xs:simpleType>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value=""/>
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

Andere Tipps

Haben Sie versucht Muster Einschränkungen? So etwas wie folgt aus:

<xs:simpleType name="telephone">
  <xs:restriction base="xs:string">
    <xs:pattern value="[0-9]{10,13}|.{0}/>
  </xs:restriction>
</xs:simpleType>

. Achtung: nicht getestet mit tatsächlichen XML

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top