W3C home > Mailing lists > Public > xmlschema-dev@w3.org > April 2008

Re: Schema Newbie Boxed in a corner . . .

From: Andrew Welch <andrew.j.welch@gmail.com>
Date: Mon, 28 Apr 2008 13:01:46 +0100
Message-ID: <74a894af0804280501n71db0fa8kd9dda3a9176cd178@mail.gmail.com>
To: "Frank Merrow" <fmerrow@qualcomm.com>
Cc: "Michael Kay" <mike@saxonica.com>, xmlschema-dev@w3.org

On 28/04/2008, Frank Merrow <fmerrow@qualcomm.com> wrote:
>  At 12:20 AM 4/26/2008, Michael Kay wrote:
>  Generally, that's not a good way of designing your XML, which explains why
> there is no way of describing your design in XML Schema. It's best to use
> element and attribute names to denote types, and element or attribute values
> to contain instance data.
>  I was afraid that would be the answer . . .
>  Unfortunately, the Application is up and running on hundreds of customer
> sites and dependent on the current setup.
>  Rolling to something new will complicate things because we have to maintain
> backwards compatibility for systems with old data, but it think having a
> schema to verify additions is important enough we probably will bite the
> bullet and make the change.
>  Thanks for confirming my fears.  ;-)

In the mean time you could use xchecker or something similar and do
XPath 2.0 validation (or XSLT etc)

A basic check would be:

//*/matches(local-name(), 'AI[0-9]{8}')

which would just check all element names were 'AI' + 8 digits.  You
can modify the check to return failures:

for $x in //* return
    	if (matches($x/local-name(), 'AI[0-9]{8}')) then 'true'
    	else concat('Element: ', $x/local-name(), ' fails validation')

xchecker will return any item in the sequence that's not "true" as the
failure message, so you have the freedom of the language to return as
much information as you like....

I wrote xchecker in a couple of days a year or so ago with the initial
goal of augmenting XML Schema with XPath 2.0 (in the appinfo element)
but it grew to be a standalone product as well.

So one approach if you have an existing XML Schema is to add the XPath
2.0 checks to the schema within the xs:appinfo element and use the
XCheckerSchemaFactory as the JAXP SchemaFactory.

The other approach is from the command line where you write the XPath
2.0 directly in the "check config" files, or perhaps refer to XSLT 2.0
files (which give a little more flexibility in complex checks).



Andrew Welch
Kernow: http://kernowforsaxon.sf.net/
Received on Monday, 28 April 2008 12:02:19 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 23:15:46 UTC