- From: Pete Cordell <petexmldev@tech-know-ware.com>
- Date: Sat, 24 Mar 2007 21:13:34 -0000
- To: <noah_mendelsohn@us.ibm.com>
- Cc: <xmlschema-dev@w3.org>
Hi Noah, I think it's simpler than that. If I have an element declaration of (which hopefully includes most of the relationships a particle might have): <xs:element name="example" type="exampletype"/> <xs:complexType name="exampleType"> <xs:complexContent> <xs:extension base="exampleBase"> <xs:sequence> <xs:element ref="other:e1"/> <xs:element name="e2" type="xs:int"/> <xs:any notQName="##localElements" minOccurs="0" maxOccurs="unbounded"/> <xs:group ref="aGroup"/> <xs:sequence maxOccurs="10"> <xs:element ref="other:e3"/> <xs:any notQName="##localElements" minOccurs="0" maxOccurs="unbounded"/> <xs:choice> <xs:element name="es1" type="xs:int"/> <xs:element name="es2" type="xs:int"/> </xs:choice> <xs:element name="e4"> <xs:complexType> <xs:sequence> <xs:element name="ec1" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="exampleBase"> <xs:sequence> <xs:element name="eb1" type="xs:int"/> <xs:any notQName="##localElements" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:group name="aGroup"> <xs:sequence> <xs:element name="eg1" type="xs:int"/> <xs:any notQName="##localElements" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:group> (I've called the wildcard ##localElements so that it is different to ##defined, which I believe already has a defined meaning.) So in the set of valid instances, any element name in the type mentioned above that could have the parent <element> (or what ever element exampleType was used to define) should be referred to in the notQName definition. Therefore, in the context of decoding an instance of <element>, then ALL of the wildcards would effectively be: <xs:any notQName="eb1 other:e1 e2 other:e3 e4 es1 es2 eg1" minOccurs="0" maxOccurs="unbounded"/> Note that ec1 is not included in the set (because it is the child of another element), and there's no reference to any potential parent of <element>. In fact, a wildcard matching <element> would be valid. However, when aGroup is used in a different complexType, or exampleBase is used with a different derived class, the resulting exclusions would be different in those cases (as they would be with the currently proposed XSD 1.1 UPA conflict rules). I hope that makes it clearer. Thanks, Pete. -- ============================================= 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/ ============================================= ----- Original Message ----- From: <noah_mendelsohn@us.ibm.com> To: "Pete Cordell" <petexmldev@tech-know-ware.com> Cc: <xmlschema-dev@w3.org> Sent: Saturday, March 24, 2007 4:34 PM Subject: Re: Permit (greedy) conflicting wildcards > Pete Cordell writes: > >> If not the default, then what I'm looking for is something like: >> >> notQName="##localElements" >> >> which does not conflict with any of the elements that have already been >> defined in the particle (and non-elemental child particles, and parents > of >> non-elemental particles etc. etc.) > > Let me get this straight. You have a schema that validates instances > like: > > <root> > <l1a/> > <l1b/> > <l1c> > <l2a> > </l2a> > <l2b> > <l3a/> > <l3b/> > </l2b> > <l2c> > </l2c> > </l1c> > <l1d/> > </root > > In case it's not clear, <lxy> decodes as nesting level=x. Presume these > are defined with the obvious sequences and global element decls in the > schema. Let's assume that type CT12b is the complex type of the element > named "l1c". If I use a wildcard in that type: > > <complexType name="ctlic"> > <sequence> > <element ref="l12a"/> > <element ref="l12b"/> > <element ref="l12c"/> > <any notQname="##defined"/> > </sequence> > </complesType> > > You want that wildcard to disallow <root> <l12a> <li12b> <l12c> and maybe > <l13a> and <l13b> (not sure if you meant descendents or children), but you > would not disallow <l1a> or <l1b> which are siblings? > > Let's take an example from the schema language itself. If we used an NIS > wildcard in the declaration of the <xsd:sequence> element, for example, it > would not match <xsd:element>, because that's already directly referenced > as a legal child of <xsd:sequence>. It would, however, allow > <xsd:import>, since that is neither a legal ancestor or declared > descendent. So, it would validate: > > <xsd:sequence> > <xsd:element ref="x"/> > <xsd:import namespace="n"/> > </xsd:sequence> > > Interestingly, I do not think it would validate > > <xsd:sequence> > <xsd:element ref="x"/> > <xsd:redefine ... /> > </xsd:sequence> > > because I believe that <xsd:sequence> is a legal descendent of > <xsd:redefine>. Is that really what you want? Could you please > clarify what you think is desirable? Thank you. > > Noah > > -------------------------------------- > Noah Mendelsohn > IBM Corporation > One Rogers Street > Cambridge, MA 02142 > 1-617-693-4036 > -------------------------------------- > > > >
Received on Saturday, 24 March 2007 21:14:03 UTC