- 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