- From: <bugzilla@jessica.w3.org>
- Date: Fri, 25 Feb 2011 13:03:27 +0000
- To: www-xml-schema-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=12184 Summary: Circularity in xs:override Product: XML Schema Version: 1.1 only Platform: PC OS/Version: Windows NT Status: NEW Severity: normal Priority: P2 Component: Structures: XSD Part 1 AssignedTo: David_E3@VERIFONE.com ReportedBy: mike@saxonica.com QAContact: www-xml-schema-comments@w3.org CC: cmsmcq@blackmesatech.com I believe there are problems in the spec in explaining what happens when two schema documents each contain xs:override elements referring to the other (or more generically, with any cycles in the xs:override graph, including as a special case a document that attempts to override itself). Consider test case over023. This contains two documents, which I shall call P (actually over023.xsd) and Q (actually over023a.xsd). P.xsd <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:override schemaLocation="Q.xsd"> <xs:element name="doc" type="xs:date"/> </xs:override> </xs:schema> Q <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:override schemaLocation="P.xsd"/> <xs:element name="doc"> <xs:complexType> <xs:sequence> <xs:element name="para" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> If we follow the process described in 4.2.5, starting at P, then If a schema document P contains an <override> element E pointing to some schema document Q, then schema(P) contains not only the components in immed(P), but also the components in schema(override(E,Q)). So what is override(E,Q)? I think it is this (call it Q'): <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:override schemaLocation="P.xsd"> <xs:element name="doc" type="xs:date"/> </xs:override> <xs:element name="doc" type="xs:date"/> </xs:schema> Next step is to evaluate schema(Q'). Because Q' contains an xs:override element, to do this we need to evaluate override(E, P). This produces P', which looks like this: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:override schemaLocation="Q.xsd"> <xs:element name="doc" type="xs:date"/> </xs:override> </xs:schema> To determine schema(P') we again need to evaluate override(Q, E), and since neither Q nor E have changed, this will produce a result identical to Q'. So the process as described never terminates. It's possible that this paragraph was intended to provide a termination condition: "If applying the override transformation specified in Transformation for xs:override (§F.2) to D and E results in a schema document equivalent to D (e.g. when none of the [children] of D, or of any <redefine> and <override> elements in D match any of the [children] of E, except for the [children] of E themselves), then the effect is the same as for a cyclic set of <include> references". However, it's far from clear what is meant by saying "the effect is the same". The paragraph refers the reader to section 4.2.3 on xs:include, which tells you to evaluate schema(Q), and evaluating schema(Q) when Q contains an xs:override element takes you back to the non-terminating xs:override rules. Looking beyond the mechanics of the detailed rules, it's hard to see what they are trying to achieve. What is the use case for permitting cyclic xs:overrides? Given the purpose of xs:override, it feels like a logical error, and I can't see why we don't treat it as such. -- Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug.
Received on Friday, 25 February 2011 13:03:29 UTC