- From: George Cristian Bina <george@oxygenxml.com>
- Date: Thu, 28 Oct 2004 10:34:35 +0300
- To: Michael Kay <mike@saxonica.com>
- Cc: "'Farber, Saul (ENV)'" <Saul.Farber@state.ma.us>, xmlschema-dev@w3.org
Hi,
I remember I also run into a similar problem some time ago...
I was about to report a bug against Xerces but then I tried to apply the
algorithm by hand and it seems that Xerces is right, see below.
Applying rule 2.1 on:
B:
<sequence>
<element ref="test:basicBit" maxOccurs="unbounded"/>
</sequence>
R:
<sequence>
<element ref="test:restrictedBasicBit" maxOccurs="unbounded"/>
</sequence>
will give:
B:
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="test:basicBit" minOccurs="1" maxOccurs="1"/>
<element ref="test:restrictedBasicBit" minOccurs="1" maxOccurs="1"/>
<choice>
R:
<element ref="test:restrictedBasicBit" maxOccurs="unbounded"/>
We apply then http://www.w3.org/TR/xmlschema-1/#rcase-RecurseAsIfGroup
B:
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="test:basicBit" minOccurs="1" maxOccurs="1"/>
<element ref="test:restrictedBasicBit" minOccurs="1" maxOccurs="1"/>
<choice>
R:
<choice minOccurs="1" maxOccurs="1">
<element ref="test:restrictedBasicBit" maxOccurs="unbounded"/>
</choice>
and following http://www.w3.org/TR/xmlschema-1/#rcase-RecurseLax we need
to map
<element ref="test:basicBit" minOccurs="1" maxOccurs="1"/>
<element ref="test:restrictedBasicBit" minOccurs="1"
to
<element ref="test:restrictedBasicBit" maxOccurs="unbounded"/>
which cannot be done.
Please let me know if I missed somethig.
A simple workaround is to write the restrictedBasicBitContainerType as
below:
<complexType name="restrictedBasicBitContainerType">
<complexContent>
<restriction base="test:basicBitContainerType">
<sequence>
<choice maxOccurs="unbounded">
<element ref="test:restrictedBasicBit"/>
</choice>
</sequence>
</restriction>
</complexContent>
</complexType>
Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com
Michael Kay wrote:
> 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 Thursday, 28 October 2004 07:33:03 UTC