- From: Sandy Gao <sandygao@ca.ibm.com>
- Date: Thu, 8 Feb 2007 12:22:20 -0500
- To: Erik Wilde <dret@berkeley.edu>
- Cc: www-xml-schema-comments@w3.org
- Message-ID: <OF5761DD74.E62DAE46-ON8525727C.005DF887-8525727C.005F6E20@ca.ibm.com>
Erik, > currently, it is impossible to write an identity constraint which > ensures the uniqueness of the tag element contents within the context > of the <tags> element, because the field xpath may only select > elements or attributes, ... How about: <xs:element name="tags"> <xs:complexType> <xs:sequence> <xs:element name="tag" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:unique name="uniqueTags"> <xs:selector xpath="tag"/> <xs:field xpath="."/> </xs:unique> </xs:element> Note that when an element matches a field, it's its "value" (content) that matters. And "text()" may even work against your will. For example, <xs:element name="tags"> <xs:complexType> <xs:sequence> <xs:element name="tag" type="xs:decimal" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:unique name="uniqueTags"> <xs:selector xpath="tag"/> <xs:field xpath="."/> </xs:unique> </xs:element> <tags> <tag>1</tag> <tag>1.0</tag> <tag>001</tag> </tags> In this case, because all values are typed "decimal", they are all the same value and should be a violation of the "unique" constraint. But if "text()" is used, they will be considered different. On a related topic ... Unfortunately schema 1.0 requires all fields must have a simple type, which means if you want "tag" to have a complex type (even with simple content), it won't work. The good news is that many validators took the liberty of interpreting that as "simple type or complex type with simple content" and would still accept your example when "tag" has a complex type (which allows attributes), as long as its content is simple. Future editions of Schema 1.0 or Schema 1.1 *may* fix this problem. Thanks, Sandy Gao XML Parser Development, IBM Canada (1-905) 413-3255 sandygao@ca.ibm.com www-xml-schema-comments-request@w3.org wrote on 2006-12-27 05:23:21 AM: > > > > > hello. > > i suggest to add "text()" to the allowed xpath subset for the > <xsl:field> element. consider the following xml fragment: > > <tags> > <tag>XML</tag> > <tag>XML Schema</tag> > <tag>XPath</tag> > </tags> > > currently, it is impossible to write an identity constraint which > ensures the uniqueness of the tag element contents within the context > of the <tags> element, because the field xpath may only select > elements or attributes, but not the text() node relative to the <tag> > element selected by the selector. > > i always found this to be a bug in the specification of identity > constraints, and xml schema 1.1 could be a good opportunity to fix it. > > kind regards and a happy new year, > > erik wilde tel:+1-510-6432253 - fax:+1-510-6425814 > dret@berkeley.edu - http://dret.net/netdret > UC Berkeley - School of Information (iSchool) > >
Received on Thursday, 8 February 2007 17:24:11 UTC