- From: Michael Kay <mike@saxonica.com>
- Date: Thu, 28 Oct 2004 00:16:46 +0100
- To: "'Farber, Saul \(ENV\)'" <Saul.Farber@state.ma.us>, <xmlschema-dev@w3.org>
Saxon reports this schema as valid, and as far as I can see, it is. Rule 2.1 of Particle Valid (Restriction) in the PER [1] explicitly caters for substitution groups: Any top-level element declaration particle (in R or B) which is the {substitution group affiliation} of one or more other element declarations and whose ·substitution group· contains at least one element declaration other than itself is treated as if it were a choice group whose {min occurs} and {max occurs} are those of the particle, and whose {particles} consists of one particle with {min occurs} and {max occurs} of 1 for each of the declarations in its ·substitution group·. You don't appear to have applied this step in your walk-through of the algorithm. Michael Kay [1] http://www.w3.org/TR/2004/PER-xmlschema-1-20040318/#coss-particle > -----Original Message----- > From: xmlschema-dev-request@w3.org > [mailto:xmlschema-dev-request@w3.org] On Behalf Of Farber, Saul (ENV) > Sent: 27 October 2004 23:31 > To: xmlschema-dev@w3.org > Subject: I'd appreciate a second-look at this, just to double-check > > > Hello experts! > > First, let me say that I've been away from XML Schema for > over a year, and now that I'm back at it in a new context > it's immediately apparent how much the tools, community and > support have improved in the last 12 to 18 months. Good job > and **THANKS** to everyone who's worked so hard for so long > on this stuff. > > Here's my question. I'm getting an error when trying to > validate the following schema in Xerces 2.6.2. First I'll > show the schema: > > <?xml version="1.0" encoding="UTF-8"?> > <schema xmlns="http://www.w3.org/2001/XMLSchema" > targetNamespace="http://www.test.com/test" > xmlns:test="http://www.test.com/test"> > <complexType name="basicBitType" abstract="true"> > <sequence> > <element name="testElement" type="token" maxOccurs="unbounded"/> > </sequence> > </complexType> > <complexType name="restrictedBasicBitType"> > <complexContent> > <restriction base="test:basicBitType"> > <sequence> > <element name="testElement" type="token" maxOccurs="1"/> > </sequence> > </restriction> > </complexContent> > </complexType> > <element name="basicBit" type="test:basicBitType" abstract="true"/> > <element name="restrictedBasicBit" > type="test:restrictedBasicBitType" substitutionGroup="test:basicBit"/> > <complexType name="basicBitContainerType"> > <sequence> > <element ref="test:basicBit" maxOccurs="unbounded"/> > </sequence> > </complexType> > <complexType name="restrictedBasicBitContainerType"> > <complexContent> > <restriction base="test:basicBitContainerType"> > <sequence> > <element ref="test:restrictedBasicBit" > maxOccurs="unbounded"/> > </sequence> > </restriction> > </complexContent> > </complexType> > </schema> > > > Now, the error comes up in the final complexType, > "restrictedBasicBitContainer". Xerces claims there is "not a > complete functional mapping between the particles" in the > definition of the complexType "restrictedBasicBitContainerType". > > I've looked through the spec, particularly the portion about > restriction, and it looks like this SHOULD be valid. Here're > the relevant sentences that look like they stick to this bug: > > 3.9.6 - Schema Particle Valid (Restriction) describes a set > of rules...almost an algorithm for checking valid particle > restriction. > > Since we're restricting the base particle > "test:basicBitContainerType" that's where the algorithm will start. > > Step 1) It's not pointless. It's not an empty particle, and > it's not actually within ANY other particle. So it's not pointless. > Step 2) We're restricting a sequence with another sequence, > so according to the table, we "Recurse" on that sequence. > > So we check: > > *** "R's occurrence range is a valid restriction of B's > occurrence range as defined by Occurrence Range OK (§3.9.6)." > > Check. Both sequences have identical min and max occurs. > And we check: > > ***"There is a complete ·order-preserving· functional mapping > from the particles in the {particles} of R to the > ***particles in the {particles} of B such that all of the > following must be true:" > > ***"2.1 Each particle in the {particles} of R is a ·valid > restriction· of the particle in the {particles} of B it maps > ***to as defined by Particle Valid (Restriction) (§3.9.6)." > > Ok, I guess this is why they call it the "recurse" method. > Our sub-particles are one single "element", so let's recurse > into that. > > ***"The declarations' {name}s and {target namespace}s are the same." > > Uh, oh. Our restricted particle name is in the same > SUBSTITUTION GROUP as the particle it's restricting, but it > doesn't have the same name! That's not so good. > > > > So does this look like an accurate interpretation of the > specification? Am I looking at this the right way? Should > this be valid? > > How good are most parsers at handling this? > > > Thanks again! > > --saul > > GIS Web Services > MassGIS - Executive Office of Environmental Affairs > > 251 Causeway Street > 5th Floor > Boston, MA 02114 > 617-626-1145 > > >
Received on Wednesday, 27 October 2004 23:16:57 UTC