- From: Paul Warren <pdw@decisionsoft.com>
- Date: Thu, 14 Jun 2007 15:43:22 +0100
- To: bud@syndafeed.com
- Cc: xmlschema-dev@w3.org, tools@decisionsoft.com
Hi Bud, I should point out that our schema validation service is simply a web frontend to the Xerces-J Schema Validator (this used to be made clear on the web page, but it seems that notice has gone AWOL - I'll get that fixed). A quick look at the schema spec suggests that Xerces is wrong on this point: "The - character is a valid character range only at the beginning or end of a ·positive character group·." regards, Paul On 14 Jun 2007, at 15:26, Bud Hovell wrote: > Hi, folks ... > > I've run across a bit of a puzzle and thought I'd at least report > it for examination by others technically qualified. > > In the course of validating a test output file found at http:// > www.amexpat.com/primeloc.xml, I discovered both it and the schema > validate without complaint on the W2C validator at http:// > www.w3.org/2001/03/webdata/xsv, but the schema does not validate at > http://tools.decisionsoft.com/schemaValidate/, which offers the > following complaint: > ================== OUTPUT ===================== > XML Schema Validator > > Well Formed: VALID > Schema Validation: INVALID > > The following errors were found: > TYPELOCMESSAGE > Validation 128, 38InvalidRegex: Pattern value '[-0-9]*' is not a > valid regular expression. The reported error was: ''-' is an > invalid character range. Write '\-'.'. > Validation 134, 38InvalidRegex: Pattern value '[-0-9+ ()]*' is not > a valid regular expression. The reported error was: ''-' is an > invalid character range. Write '\-'.'. > > ================ END OUTPUT =============== > > ... evidently because the non-range-denoting "-" character is shown > in the first position of the pattern match in brackets rather than > last. I'm not acquainted with the specific rules for schema > validation, but seem to recall that most regex matching rules DO > require a literal naked dash to be mentioned last. In this case, > the parser evidently wants to see it backslashed so it is > understood to denote a literal rather than a range. > > This is the text of the two relevant blocks in the 2007-05-21 > schema file (attached in full) which I received from the provider > and have input for testing at DecisionSoft: > > <xsd:simpleType name="integerOrNull_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[-0-9]*"/> > </xsd:restriction> > </xsd:simpleType> > <!-- Telephone can contains numbers, spaces, brackets, +'s > and -'s /--> > <xsd:simpleType name="telephoneNumber_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[-0-9+ ()]*"/> > </xsd:restriction> > </xsd:simpleType> > > ... which shows no evidence of a backslash to protect the literal > dash. > > These two parsers offer conflicting results given identical input. > While I'm agnostic as to which may be judged correct, they should > at least agree even if both are in error. :) > > I'm jointly addressing this to the W3C team and the folks over at > DecisionSoft in hope this disparity may be resolved. > > Best regards, > -- Bud Hovell bud@syndafeed.com http://www.syndafeed.com > <?xml version="1.0" encoding="utf-8"?> > <!-- edited with XMLSpy v2006 rel. 3 sp1 (http://www.altova.com) by > Andy Dawkins (Primelocation) --> > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <xsd:annotation> > <xsd:documentation xml:lang="en"> > PrimeLocation.com FastcropX1 data schema - Last Update > 2007-05-21 > </xsd:documentation> > </xsd:annotation> > <xsd:element name="root" type="root_Type"/> > <xsd:complexType name="root_Type"> > <xsd:sequence> > <xsd:element name="agentGroup" type="agentGroup_Type" > minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> > </xsd:complexType> > <xsd:complexType name="agentGroup_Type"> > <xsd:sequence> > <xsd:element name="mode" type="agentGroupMode_Type" > default="FULL"/> > <xsd:element name="exportDate" type="xsd:dateTime" minOccurs="0"/> > <!-- Not madatory but useful for debugging --> > <xsd:element name="agentBranch" type="agentBranch_Type" > minOccurs="0" maxOccurs="unbounded"/> > </xsd:sequence> > <xsd:attribute name="code" type="xsd:string" use="required"/> > </xsd:complexType> > <xsd:complexType name="agentBranch_Type"> > <xsd:sequence> > <xsd:element name="property" type="property_Type" minOccurs="0" > maxOccurs="unbounded"/> > </xsd:sequence> > <xsd:attribute name="code" type="xsd:string" use="required"/> > </xsd:complexType> > <xsd:complexType name="property_Type"> > <xsd:choice> > <xsd:sequence> > <!-- Property Address Details /--> > <xsd:element name="fullPostCode" type="xsd:string"/> > <xsd:element name="countryCode" type="countryCode_Type" > default="GB" minOccurs="0"/> > <xsd:element name="name" type="xsd:string"/> > <xsd:element name="address" type="xsd:string"/> > <xsd:element name="regionCode" type="xsd:string" minOccurs="0"/> > <!-- Property Description /--> > <xsd:element name="summary" type="xsd:string" minOccurs="0"/> > <xsd:element name="details" type="xsd:string" minOccurs="0"/> > <!-- Property Price Information /--> > <xsd:element name="pricePrefix" type="pricePrefix_Type"/> > <xsd:element name="price" type="integerRange_Type"/> > <xsd:element name="priceCurrency" type="priceCurrency_Type" > default="GBP" minOccurs="0"/> > <!-- Property sale specifics /--> > <xsd:element name="sellingState" type="sellingState_Type"/> > <xsd:element name="propertyType" type="propertyType_Type"/> > <xsd:element name="newHome" type="xsd:string" minOccurs="0"/> > <xsd:element name="saleOrRent" type="saleOrRent_Type"/> > <xsd:element name="sharedCommission" type="xsd:string" > minOccurs="0"/> > <!-- Rental Information /--> > <xsd:element name="groundRent" type="xsd:decimal" minOccurs="0"/> > <!-- Value in GBP per annum /--> > <xsd:element name="serviceCharge" type="xsd:decimal" > minOccurs="0"/> > <!-- Value in GBP per annum /--> > <xsd:element name="furnished" type="xsd:boolean" minOccurs="0"/> > <xsd:element name="rentalLength" type="xsd:int" minOccurs="0"/> > <!-- Tenure Information /--> > <xsd:element name="tenure" type="tenure_Type" default="" > minOccurs="0"/> > <xsd:element name="leaseholdYearsRemaining" > type="integerOrNull_Type" minOccurs="0"/> > <!-- Property Room Information /--> > <xsd:element name="bedrooms" type="integerRange_Type"/> > <xsd:element name="bathrooms" type="integerRange_Type"/> > <xsd:element name="receptionRooms" type="integerRange_Type"/> > <!-- Property Images, Supported types: JPG, PNG, GIF /--> > <xsd:element name="mainImage" type="asset_Type" minOccurs="0"/> > <!-- The file name of the image /--> > <xsd:element name="additionalImage1" type="asset_Type" > minOccurs="0"/> > <xsd:element name="additionalImage2" type="asset_Type" > minOccurs="0"/> > <xsd:element name="additionalImage3" type="asset_Type" > minOccurs="0"/> > <xsd:element name="additionalImage4" type="asset_Type" > minOccurs="0"/> > <!-- Floorplans, Up to four images ( JPG, PNG, GIF ) OR a > single PDF /--> > <xsd:element name="floorPlan1" type="asset_Type" minOccurs="0"/> > <!-- The file name of the image /--> > <xsd:element name="floorPlan2" type="asset_Type" minOccurs="0"/> > <xsd:element name="floorPlan3" type="asset_Type" minOccurs="0"/> > <xsd:element name="floorPlan4" type="asset_Type" minOccurs="0"/> > <!-- Brochure, A single PDF /--> > <xsd:element name="brochure" type="asset_Type" minOccurs="0"/> > <!-- The file name of the pdf /--> > <!-- Virtual Tour --> > <xsd:element name="vTourURL" type="xsd:string" minOccurs="0"/> > <!-- URL to a virtual Tour --> > <!-- Virtual Tour --> > <xsd:element name="vTour2URL" type="xsd:string" minOccurs="0"/> > <!-- URL to a virtual Tour --> > <!-- HIP Document --> > <xsd:element name="HIPDocument" type="asset_Type" minOccurs="0"/> > <!-- Filename or URL to an HIP Document --> > <!-- EPC Document --> > <xsd:element name="EPCDocument" type="asset_Type" minOccurs="0"/> > <!-- Filename or URL to an EPC Document --> > <!-- Energy Efficiency Ratings --> > <xsd:element name="EERImage" type="asset_Type" minOccurs="0"/> > <xsd:element name="EERCurrent" type="xsd:integer" minOccurs="0"/> > <xsd:element name="EERPotential" type="xsd:integer" > minOccurs="0"/> > <!-- Environment Impact Ratings --> > <xsd:element name="EIRImage" type="asset_Type" minOccurs="0"/> > <xsd:element name="EIRCurrent" type="xsd:integer" minOccurs="0"/> > <xsd:element name="EIRPotential" type="xsd:integer" > minOccurs="0"/> > <!-- Optional Contact Information. If provided will be used > instead of contact information of the agent branch --> > <xsd:element name="contactName" type="xsd:string" minOccurs="0"/> > <xsd:element name="contactTelephone" > type="telephoneNumber_Type" minOccurs="0"/> > <xsd:element name="contactEmail" type="xsd:string" minOccurs="0"/> > <!-- Additional Record Information /--> > <xsd:element name="createdDate" type="xsd:dateTime" > minOccurs="0"/> > <xsd:element name="modifiedDate" type="xsd:dateTime" > minOccurs="0"/> > <xsd:element name="additionalKeywords" type="xsd:string" > minOccurs="0"/> > <xsd:element name="notes" type="xsd:string" minOccurs="0"/> > </xsd:sequence> > <xsd:sequence> > <xsd:element name="delete" type="xsd:string" default="1" > minOccurs="0"/> > </xsd:sequence> > </xsd:choice> > <xsd:attribute name="propertyID" type="xsd:string" use="required"/> > </xsd:complexType> > <xsd:complexType name="asset_Type"> > <xsd:simpleContent> > <xsd:extension base="xsd:string"> > <xsd:attribute name="modifiedDate" type="xsd:dateTime" > use="optional"/> > </xsd:extension> > </xsd:simpleContent> > </xsd:complexType> > <!-- countryCode is always 2 alpha characters /--> > <xsd:simpleType name="countryCode_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[A-Za-z]{2}"/> > </xsd:restriction> > </xsd:simpleType> > <!-- priceCurrency is always 3 alpha characters /--> > <xsd:simpleType name="priceCurrency_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[A-Za-z]{3}"/> > </xsd:restriction> > </xsd:simpleType> > <!-- price,bedrooms,bathrooms, etc > can be a string representation of an integer > or an integer range of two integers seperated by ' TO ' or > ' - ' /--> > <xsd:simpleType name="integerRange_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="([0-9]* ?(TO|-) ?[0-9]*|[0-9]*)"/> > </xsd:restriction> > </xsd:simpleType> > <xsd:simpleType name="integerOrNull_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[-0-9]*"/> > </xsd:restriction> > </xsd:simpleType> > <!-- Telephone can contains numbers, spaces, brackets, +'s and > -'s /--> > <xsd:simpleType name="telephoneNumber_Type"> > <xsd:restriction base="xsd:string"> > <xsd:pattern value="[-0-9+ ()]*"/> > </xsd:restriction> > </xsd:simpleType> > <!-- agentGroupMode has a set list of possible values /--> > <xsd:simpleType name="agentGroupMode_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="FULL"/> > <xsd:enumeration value="INCR"/> > <!-- Full /--> > <!-- Incremental /--> > </xsd:restriction> > </xsd:simpleType> > <!-- pricePrefix has a set list of possible values /--> > <xsd:simpleType name="pricePrefix_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="F"/> > <xsd:enumeration value="I"/> > <xsd:enumeration value="O"/> > <xsd:enumeration value="A"/> > <xsd:enumeration value="S"/> > <xsd:enumeration value="R"/> > <xsd:enumeration value="B"/> > <xsd:enumeration value="G"/> > <xsd:enumeration value="P"/> > <xsd:enumeration value="W"/> > <xsd:enumeration value="M"/> > <xsd:enumeration value="N"/> > <!-- Asking price of /--> > <!-- Offers in the region of /--> > <!-- Offers in excess of /--> > <!-- Auction guild price of /--> > <!-- Subject to contract /--> > <!-- Price range of /--> > <!-- Prices from /--> > <!-- Guide price /--> > <!-- Price on Application /--> > <!-- Weekly rental of /--> > <!-- Monthly rental of /--> > <!-- Annual rental of /--> > </xsd:restriction> > </xsd:simpleType> > <!-- sellingState has a set list of possible values /--> > <xsd:simpleType name="sellingState_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="V"/> > <xsd:enumeration value="U"/> > <xsd:enumeration value="H"/> > <xsd:enumeration value="N"/> > <xsd:enumeration value="S"/> > <xsd:enumeration value="L"/> > <!-- Viewing /--> > <!-- Under offer /--> > <!-- Hidden /--> > <!-- New Instruction /--> > <!-- Sold /--> > <!-- Let /--> > </xsd:restriction> > </xsd:simpleType> > <!-- propertyType has a set list of possible values /--> > <xsd:simpleType name="propertyType_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="H"/> > <xsd:enumeration value="F"/> > <xsd:enumeration value="A"/> > <!-- House /--> > <!-- Flat /--> > <!-- Agricultural /--> > </xsd:restriction> > </xsd:simpleType> > <!-- saleOrRent has a set list of possible values /--> > <xsd:simpleType name="saleOrRent_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="S"/> > <xsd:enumeration value="R"/> > <!-- Sale /--> > <!-- Rent /--> > </xsd:restriction> > </xsd:simpleType> > <!-- tenure has a set list of possible values /--> > <xsd:simpleType name="tenure_Type"> > <xsd:restriction base="xsd:string"> > <xsd:enumeration value="F"/> > <xsd:enumeration value="S"/> > <xsd:enumeration value="L"/> > <xsd:enumeration value="X"/> > <xsd:enumeration value=""/> > <!-- Freehold /--> > <!-- Share of freehold /--> > <!-- Leasehold /--> > <!-- Not Specified /--> > <!-- Not Specified /--> > </xsd:restriction> > </xsd:simpleType> > </xsd:schema> -- CTO, DecisionSoft Limited +44 1865 203192 / +44 7968 408138
Received on Thursday, 14 June 2007 14:44:03 UTC