[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Extending type definitions using RelaxNG Compact


xsd string maxlength
Kristopher Brown wrote:
> Hi,
> 
> We are using xsd:string as the base datatype for our types: e.g.
> 
>   datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
> 
>   FirstName = xsd:string {
>       maxLength = "30"
>   }
> 
>   LastName = xsd:string {
>       maxLength = "60"
>   }
> 
> We'd like to introduce a more restricted string type, something like:
> 
>   AlphaString = xsd:string {
>       pattern = "[a-zA-Z]*"
>   }
> 
>   FirstName = AlphaString {
>       maxLength = "30"
>   }
> 
>   LastName = AlphaString {
>       maxLength = "60"
>   }

> Unfortunately, the "FirstName = AlphaString" example doesn't work.  Does
> anyone know a way of achieving what I'm trying to do?  Is it even
> possible with RelaxNG?

Not possible in RelaxNG 1.0.  During the development of RelaxNG 1.0, we 
attempted to solve this, but we didn't manage to achieve a solution that 
we found sufficiently simple.  I would like to see this solved in a 
future version of RelaxNG.

I have been thinking about the following approach.  TREX provided a 
concur operator which would have been sufficient for this, but it didn't 
make it into RelaxNG, because there are major implementation issues.  In 
RelaxNG 1.0, <data> elements can have an <except> clause; in the compact 
syntax this is expressed by following the datatype with "-" and a 
pattern.  For example,

   xsd:token - "foo"

matches any string other than "foo".  You can think of this as being a 
difference operator restricted to a left-hand operand of <data>; a 
general difference operator would have the same implementation issues as 
concur.  We could similarly introduce a restricted version of concur 
that works only with datatypes.  Let's suppose we use : for this.  Then 
you example could be written:

   AlphaString = xsd:string {
       pattern = "[a-zA-Z]*"
   }

   FirstName = xsd:string { maxLength = "30" } : AlphaString

   LastName = xsd:string { maxLength = "60 } : AlphaString

The semantics of

   dt : pattern

are simply that it matches if both dt and pattern match.

The XML syntax might be

<data type="string">
   <param name="maxLength">30</param>
   <restrict>
     <ref name="AlphaString"/>
   </restrict>
</data>

James




PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.