Re: text() in <xs:field> xpaths

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