[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: [relax-ng] Motivation for restrictions in section 7.2
On Fri, 2002-07-05 at 11:21, Murata Makoto wrote: > >Can someone explain me (or give some pointers) the reasons for the > >restrictions in section 7.2 which introduce a difference between content > >models which doesn't seem needed a priori. > > Without this, validation becomes extremely difficult. If we follow the XPath (1.0) data model and consider that each "data" or "value" pattern matches a single text node I don't think that this is that difficult... > How do you validate "33333000" against > <group> > <data type="xsd:short"/> > <data type="xsd:short"> > <param name="maxInclusive">10000</param> > </data> > </group>? > > We have to break "33333000" into two strings, namely > "3333" and "3000". No, not if you think in term of "text nodes" instead of strings. In this case you have a single text node and a group requiring 3 text nodes. It's thus clear that the document is invalid! > This requires backtracking. > (And this document is useless for application programs > unless they can receive "3333" and "3000".) > Moreover, how do we handle whitespace? Suppose we > have > > <element name="foo"> > <group><data type="xsd:short"/> > <element name="a"><empty/></element> > </group> > </element> > > and > > <foo> > 1 > <a/> > </foo> > > People would expect that this is valid. Then, suppose > > <element name="foo"> > <group><data type="xsd:string"> > <param name="minLength">2</param> > </data> > <element name="a"><empty/></element> > </group> > </element> > > as a pattern. Does the previous element match with the > pattern? No, clearly not. You have a "foo" element with a text node equal to:"\n\t1\n\t", you've explicitely require to keep whitespaces by chosing a "xsd:string" type thus the length of the value is 5 and the constraint of the facet is not met. > I feel that <list> causes even more difficult problems. I don't think so either: I understand the "list" pattern as a transformation of a text node into a list of text nodes split on their whitespaces. There is no confusion at this level IMO. Sorry to insist, but I must be missing something obvious! The specs says explicitely: <quote> An XML document is represented by an element. An element consists of * a name * a context * a set of attributes * an ordered sequence of zero or more children; each child is either an element or a non-empty string; the sequence never contains two consecutive strings </quote> This IMO, clearly identifies "strings" as what XPath calls text nodes. and later on: <quote> RELAX NG relies on datatype libraries to perform datatyping. A datatype library is identified by a URI. A datatype within a datatype library is identified by an NCName. A datatype library provides two services. * It can determine whether a string is a legal representation of a datatype. This service accepts a list of zero or more parameters. For example, a string datatype might have a parameter specifying the length of a string. The datatype library determines what parameters are applicable for each datatype. * It can determine whether two strings represent the same value of a datatype. This service does not have any parameters. </quote> If these are the same "strings", there can be no doubt that they match actual text nodes in the document, with the exception of list types which "returns a sequence of strings one for each whitespace delimited token of s; each string in the returned sequence will be non-empty and will not contain any whitespace". I don't see where there is any confusion in the interpretation of the examples you gave if we stick to these definitions. Thanks Eric -- See you in San Diego. http://conferences.oreillynet.com/os2002/ ------------------------------------------------------------------------ Eric van der Vlist http://xmlfr.org http://dyomedea.com (W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema ------------------------------------------------------------------------
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC