- From: Arnold Rots <arots@head.cfa.harvard.edu>
- Date: Wed, 19 Jan 2005 14:00:33 -0500 (EST)
- To: xmlschema-dev@w3.org
- CC: "Arnold H. Rots" <arots@head.cfa.harvard.edu>, Simon.Cox@csiro.au
I have a variation of Simon's case that common sense (imho) says should be legal, but gets rejected and Simon's work-around does not really apply. Let there be a substitution group with head element H and members E1 and E2 (derived by extension from H's type). Now I define two containers CType and RType, where RType is derived from CType by restriction. CType contains at least one H. RType contains: one E1 zero or one E2 zero or more H In my simple logic, RType forms a subset of all legal CTypes: it contains at least one member of the substitution group H and may contain more. The restriction is that it is required to contain one element E1. E2 is mainly there for decoration <complexType name="CType"> <sequence> <element ref="H" maxOccurs="unbounded"/> </sequence> </complexType> <complexType name="RType"> <complexContent> <restriction base="CType"> <sequence> <element ref="E1"/> <element ref="E2" minOccurs="0" maxOccurs="unbounded"/> <element ref="H" minOccurs="0" maxOccurs="unbounded"/> </sequence> </restriction> </complexContent> </complexType> To me, this would seem like an intended use of substitution groups in derivation by restriction, but it gets caught up in a problem similar to what was described in this thread - except that there does not seem to be a similar work-around. Am I wrong - on either count? Cheers, _ Arnold Rots -----Original Message----- > From: Simon Cox > Received on Thursday, 28 October 2004 11:12:52 GMT > > The GML development team encountered this issue with Xerces. > The process is that when the substitution group head is expanded into a <choice> group during validation, the cardinality constraint gets moved from the element declaration to the group container. > Xerces does not happily move the cardinality constraints around even if they do produce "equivalent" content models. > > We came up with the following patterns to keep Xerces happy: > > Change > > <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> > > to > > <complexType name="basicBitContainerType"> > <sequence> > <element ref="test:basicBit" maxOccurs="unbounded"/> > </sequence> > </complexType> > <complexType name="restrictedBasicBitContainerType"> > <complexContent> > <restriction base="test:basicBitContainerType"> > <sequence> > <choice maxOccurs="unbounded"> > <element ref="test:restrictedBasicBit"/> > </choice> > </sequence> > </restriction> > </complexContent> > </complexType> > > or more elegantly to > > <complexType name="basicBitContainerType"> > <sequence maxOccurs="unbounded"> > <element ref="test:basicBit"/> > </sequence> > </complexType> > <complexType name="restrictedBasicBitContainerType"> > <complexContent> > <restriction base="test:basicBitContainerType"> > <sequence maxOccurs="unbounded"> > <element ref="test:restrictedBasicBit"/> > </sequence> > </restriction> > </complexContent> > </complexType> > > Simon Cox > > > -----Original Message----- > > From: xmlschema-dev-request@w3.org > > [mailto:xmlschema-dev-request@w3.org] On Behalf Of Michael Kay > > Sent: Thursday, 28 October 2004 7:17 AM > > To: 'Farber, Saul (ENV)'; xmlschema-dev@w3.org > > Subject: RE: I'd appreciate a second-look at this, just to > > double-check > > > > > > 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 > > > > > > > > > > > > > > > > -------------------------------------------------------------------------- Arnold H. Rots Chandra X-ray Science Center Smithsonian Astrophysical Observatory tel: +1 617 496 7701 60 Garden Street, MS 67 fax: +1 617 495 7356 Cambridge, MA 02138 arots@head.cfa.harvard.edu USA http://hea-www.harvard.edu/~arots/ --------------------------------------------------------------------------
Received on Thursday, 20 January 2005 04:41:24 UTC