- From: Pete Cordell <petexmldev@tech-know-ware.com>
- Date: Mon, 19 Mar 2007 10:07:55 -0000
- To: "Bryan Rasmussen" <BRS@itst.dk>, <xmlschema-dev@w3.org>
Original Message From: "Bryan Rasmussen" > >It says that under the current interpretation of XSD 1.1 the following > >(slightly simplified from David's document) is illegal due to the > >minOccurs="0" of middle name allowing the two adjacent wildcards to > >conflict: > > > <xs:sequence> > > <xs:element name="given" type="xs:string"/> > > <xs:any namespace="##any" processContents="lax" > > minOccurs="0" maxOccurs="unbounded"/> > > <xs:element name="middle" type="xs:string" minOccurs="0"/> > > <xs:any namespace="##any" processContents="lax" > > minOccurs="0" maxOccurs="unbounded"/> > > <xs:element name="family" type="xs:string"/> > > </xs:sequence> > > > Well I would have thought that it should also be illegal because I > wouldn't > know if any element name (other than given) is one of the unbounded any? > Hmm, > i seem to remember somewhere a discussion as to whether or not an element > in > a structure that was a known should cause the any from stopping, which I > guess this would be a case of, but I can't remember the outcome. At any > rate > I think it's problematic. The current rules in XSD 1.1 says that if an element and a wildcard conflict, then the element wins. > > <xs:sequence> > > <xs:any namespace="##any" processContents="lax" > > minOccurs="0" maxOccurs="unbounded"/> > > <xs:any namespace="##any" processContents="lax" > > minOccurs="0" maxOccurs="unbounded"/> > > <xs:any namespace="##any" processContents="lax" > > minOccurs="0" maxOccurs="unbounded"/> > > </xs:sequence> > > >they should be allowed to do it and it wouldn't be an error. > > I suppose this should also be allowed but not only do I doubt its > usefulness > I doubt its implementation would be uniformly achieved. This is similar to a regular expression of the form: /(\w*)(\w*)(\w*)/ This is quite legal (although not necessarily sensible!). Also, if you had an input string like: abcdefghijkl It's quite deterministic about the outcome, it's uniformly implemented and there is no ambiguity. The XSD case should be the same. BTW, the former case is analogous to a regular expression of the form (representing each element as a single letter): /^(G)([^GMF]*)(M?)([^GMF]*)(F)$/ Again, this is completely deterministic, has no ambiguity and is uniformly implemented. Thanks for your comments, Pete. P.S. Quick Perl script for those that want to play: #!/usr/bin/perl testit('GMF'); testit('GajhvMjhbkjF'); testit('GkjhgkjMF'); testit('GMkjhgkjF'); testit('GF'); testit('GljkjhgkjhF'); testit('jkhghGMF'); testit('GMFjhgkj'); testit('MF'); testit('ajhvMjhbkjF'); testit('GkjhgkjM'); testit('kjhgkjF'); testit('GM'); testit('GljkjhgkjhM'); sub testit() { if( $_[0] =~ /^(G)([^GMF]*)(M?)([^GMF]*)(F)$/ ) { print "In: $_[0]\n1: $1\n2: $2\n3: $3\n4: $4\n5: $5\n\n"; } else { print "In $_[0]\nNo Match\n\n"; } } -- ============================================= Pete Cordell Tech-Know-Ware Ltd for XML to C++ data binding visit http://www.tech-know-ware.com/lmx/ http://www.codalogic.com/lmx/ =============================================
Received on Monday, 19 March 2007 10:08:43 UTC