- From: <noah_mendelsohn@us.ibm.com>
- Date: Wed, 12 Jun 2002 10:35:26 -0400
- To: Robin La Fontaine <robin@monsell.co.uk>
- Cc: Mark Feblowitz <mfeblowitz@frictionless.com>, "'Torsten Curdt'" <tcurdt@dff.st>, xmlschema-dev@w3.org
Robin La Fontaine writes: >> It is a real shame that XML Schema has no >> way to indicate whether order is important >> or not. Choice does not tell you that. In my opinion, the issue is more subtle than you might be implying. First of all, the order of XML elements is by definition significant in an XML Infoset. Schema can do nothing to change that. What schema can say is that documents <A/><B/> and documents with <B/><A/> are both valid, but it is in either case appropriate for an application to derive information from the order in which these elements appear (a non-normative proposal has been kicking around for an annotation that would signal that you did not care after all -- if you're a W3C member, look around in the archives for the issue labeled LC-200, which was our last call issue #200). Also, as has been noted several times, if we allowed: <sequence> <element ref="a"/> <element ref="b"/> <all> <element ref="c"/> <element ref="d"/> </all> </sequence> then you either need a different sort of parser than almost all implementations use (Deterministic Finite State Automata) or you have a combinatorial explosion in the number of states. The limited form of "all" that we do support can easily be implemented with the same sort of parsing machinery that is used for attributes -- that's part of why we have the limits we do. RELAX-NG is indeed a completely different class of language, requiring a quite different (but very nice) approach to parsing. Though it's not my area of expertise, my impression that it is ultimately in the general case a non-deterministic parse that could in principle have rather high performance costs. Obviously, Murata-san & friends have engineered it to give practical performance in many cases of interest. There are also some subtleties as to what sort of typing information a non-deterministic parse can provide to a query system (along with an interesting debate over whether such typing information is important and valuable, or a mistake in the first place. There are well held opinions by smart people on both sides of that question, as far as I can tell.) Anyway: my point is that the tradeoffs are at best subtle. This is not something the Schema WG just skipped because we were too lazy to provide the function. It was a more-or-less conscious tradeoff made given the options available in the design space. Of course, I speak for myself and not the schemas workgroup. ------------------------------------------------------------------ Noah Mendelsohn Voice: 1-617-693-4036 IBM Corporation Fax: 1-617-693-8676 One Rogers Street Cambridge, MA 02142 ------------------------------------------------------------------ Robin La Fontaine <robin@monsell.co.uk> Sent by: xmlschema-dev-request@w3.org 06/12/2002 11:20 AM To: Mark Feblowitz <mfeblowitz@frictionless.com>, "'Torsten Curdt'" <tcurdt@dff.st>, xmlschema-dev@w3.org cc: (bcc: Noah Mendelsohn/Cambridge/IBM) Subject: RE: mixing orderer and unordered elements In this type of situation I have found it is better to introduce a wrapper element to make it absolutely clear and avoid the complex structure. An extra element is cheap compared to having errors, and it is usually much easier to process with XSL, for example. It also makes it easier to compare the files and find changes (which is our business!). It is a real shame that XML Schema has no way to indicate whether order is important or not. Choice does not tell you that. Robin At 9:52 am -0400 12/6/02, Mark Feblowitz wrote: >Ah - I wondered about that. Then you'd have to go with something more like > ><xs:element name="Root"> > <xs:complexType> > <xs:sequence> > <xs:element name="Seq1"/> > <xs:element name="Seq2"/> > <xs:choice> > <xs:sequence> > <xs:element >name="Unordered1" minOccurs="0" maxOccurs="unbounded"/> > <xs:element >name="Unordered2" minOccurs="0" maxOccurs="unbounded"/> > </xs:sequence> > <xs:sequence> > <xs:element >name="Unordered2" minOccurs="0" maxOccurs="unbounded"/> > <xs:element >name="Unordered1" minOccurs="0" maxOccurs="unbounded"/> > </xs:sequence> > </xs:choice> > </xs:sequence> > </xs:complexType> > </xs:element> > >Any number of Unordered1's followed by any number of Unordered2's, or >Any number of Unordered2's followed by any number of Unordered1's > >Does that sound more like it? > >Mark Feblowitz >XML Architect > [t] 617.715.7231 > [f] 617.495.0188 >Frictionless Commerce Incorporated > [e] mfeblowitz@frictionless.com > [w] http://www.frictionless.com > [m] 400 Technology Square, 9th Floor > Cambridge, MA 02139 >Open Applications Group Incorporated > [e] mfeblowitz@openapplications.org > [w] http://www.openapplications.org > > -----Original Message----- >From: Torsten Curdt [mailto:tcurdt@dff.st] >Sent: Wednesday, June 12, 2002 3:58 AM >To: Mark Feblowitz; xmlschema-dev@w3.org >Subject: Re: mixing orderer and unordered elements > >Hi, Mark, > >thanks for the suggestion but > >On Tuesday 11 June 2002 17:14, Mark Feblowitz wrote: >> How about: >> >> <xs:element name="Root"> >> <xs:complexType> >> <xs:sequence> >> <xs:element name="Seq1"/> >> <xs:element name="Seq2"/> >> <xs:sequence> >> <xs:choice maxOccurs="unbounded"> >> <xs:element >> name="Unordered1"/> >> <xs:element >> name="Unordered2"/> >> </xs:choice> >> </xs:sequence> >> </xs:sequence> >> </xs:complexType> >> </xs:element> > >wouldn't that also allow: > > <Root> > <Seq1/> > <Seq2/> > <Unordered2/> > <Unordered1/> > <Unordered2/> > </Root> > >which is not what I want... >-- >Torsten -- -- ----------------------------------------------------------------- Robin La Fontaine, Director, Monsell EDM Ltd DeltaXML: "Change control for XML in XML" Tel: +44 1684 592 144 Fax: +44 1684 594 504 Email: robin.lafontaine@deltaxml.com http://www.deltaxml.com
Received on Wednesday, 12 June 2002 10:56:16 UTC