- From: Henry S. Thompson <ht@cogsci.ed.ac.uk>
- Date: 07 Nov 2001 10:25:02 +0000
- To: Joan Pujol <joan.pujol@ima.udg.es>
- Cc: xmlschema-dev@w3.org
Joan Pujol <joan.pujol@ima.udg.es> writes: > This break my rules, because Group don't provide a namespace and > there are two elements with the same name: > <Struct name='Film'> > <Scalar name='Title'> > <Group name='Group1'> > <Scalar name='Title'> > </Group> > </Struct> > > but this don't: > Because the struct provides another 'namespace' for his children elements. > <Struct name='Film'> > <Scalar name='Title'> > <Struct name='Struct1'> > <Scalar name='Title'> > </Struct> > </Struct> > > Can I expresse it with Schema Identity Constraints? So we have three facts: 1) Struct is the scoping element, so the key constraint must be declared there; 2) Struct's nest and are opaque for key uniqueness, so the selector pattern can't be './/Scalar'; 3) The XPath expression language, much less the subset used in XML Schema, doesn't allow you to rule out a particular tag at any point in a path. So the best you can do is to explicitly specify the necessary disjunction, e.g. <selector xpath='Scalar|Group/Scalar'/> If Group can nest arbitrarily, you can't cover that. If in practice the depth will be limited to, say, depth 3, then <selector xpath='Scalar|Group/Scalar|Group/Group/Scalar|Group/Group/Group/Scalar'/> would do. ht -- Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh W3C Fellow 1999--2001, part-time member of W3C Team 2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440 Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk URL: http://www.ltg.ed.ac.uk/~ht/
Received on Wednesday, 7 November 2001 05:24:08 UTC