W3C home > Mailing lists > Public > xmlschema-dev@w3.org > June 2002

Re: element with content of type "xpath"

From: Jeni Tennison <jeni@jenitennison.com>
Date: Mon, 24 Jun 2002 17:41:01 +0100
Message-ID: <87103296011.20020624174101@jenitennison.com>
To: Nicolas SABOURET <Nicolas.Sabouret@limsi.fr>
CC: xmlschema-dev@w3.org

Hi Nicolas,

> I'd like to write a schema in which one element (say foo) should
> have a content of type xpath. I'd like not to write :
>         <xsd:element name="foo" type="xsd:string"/>
> But rather something like :
>         <xsd:element name="foo" type="xpath"/>
> thus specifying that I want to respect the xpath syntax within this
> element's content. Is this possible ?

Well, you can define your own simple type called 'xpath', and refer to
that:

<xs:element name="foo" type="xpath" />

<xs:simpleType name="xpath">
  ...
</xs:simpleType>

The problem is then how to define the simple type; it's not one of the
built-in XML Schema data types, so you have to define it yourself, and
the closest thing would be a xs:token (so that whitespace is
collapsed) with a regular expression (pattern facet) to do the
validation. That's where things get difficult because (as I understand
it), full XPath isn't a regular language so it's impossible to write a
regular expression to test it.

There are subsets of XPath that can be expressed as a regular
expression. For example, you could write a regular expression for
location paths that only used the child and attribute axes, like:

<xs:simpleType name="xpath">
  <xs:restriction base="xs:token">
    <xs:pattern
      value="/?(((\i\c*:)?\i\c*)|\*)(/@?(((\i\c*:)?\i\c*)|\*))+" />
  </xs:restriction>
</xs:simpleType>

( \i\c* is an XML name; (\i\c*:)?\i\c* is a QName; ((\i\c*:)?\i\c*)|\*
is an XPath name test )

But you might find that simply having a type named 'xpath' is enough
to tell people using the language that the value of the element should
be an XPath.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/
Received on Monday, 24 June 2002 12:41:03 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:31 GMT