Martin, Xerces is doing what the schema 1.0 spec requires. It's the "remove pointless particles" that's causing the problem. See clause 2.2 of [1].
So after the removal process, (ii) to (iv) all become (A,C,D). Now the base has a sequence of 2 items but the restriction has 3 items. This does look strange, which is why in schema 1.1 [2], the 5x5 table is replaced by a rule similar to "as long as the restriction doesn't allow more than the base". XSV accepts the schema docs because it's been updated to use the 1.1 rules for particle restriction. In Xerces we are working on implementing schema 1.1, on a branch. The new particle restriction rules are not available yet. [1] http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-particle-restrict [2] http://www.w3.org/TR/xmlschema11-1/ Thanks, Sandy Gao XML Technologies, IBM Canada Editor, W3C XML Schema WG. (1-905) 413-3255 T/L 313-3255 |------------> | From: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |"Thomson, Martin" <[email protected]> | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | To: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |"[email protected]" <[email protected]> | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | Date: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |2010-09-23 12:19 AM | >--------------------------------------------------------------------------------------------------------------------------------------------------| |------------> | Subject: | |------------> >--------------------------------------------------------------------------------------------------------------------------------------------------| |Simple nested restriction | >--------------------------------------------------------------------------------------------------------------------------------------------------| I'm trying to understand why Xerces is rejecting what appears to be a simple restriction. The base type permits either of A,B or A,C,D; the restricting types simply remove the choice: Base = (A,(B|(C,D))) i. Restriction = (A,B) -- OK ii. Restriction = (A,C,D) -- Not OK iii. Restriction = (A,(C,D)) -- Not OK iv. Restriction = (A,((C,D)|)) -- Not OK As the last two examples show, mimicking the structure of the base type with choices and sequences is too easily collapsed this to bluff it. I get the impression that this is related to MapAndSum [1]. From my uneducated reading, it seems like MapAndSum never considered the simple case where the sequence mapped entirely to one of the particles of the choice. XSV [2] accepts all four forms. I can see how this might be viewed as a valid interpretation of the specification, but it's a real nuisance. Should I raise a bug report on this? Cheers, Martin [1] http://www.w3.org/TR/xmlschema-1/#rcase-MapAndSum [2] http://www.w3.org/2001/03/webdata/xsv
<<inline: graycol.gif>>
<<inline: ecblank.gif>>
