RE: Both extending and restricting with <redefine>

I think this is working in Saxon more by accident than design.

I can't see a rule in Schema that bans <xs:redefine> containing two
redefinitions of the same component, but there's also no statement saying
what the effect should be.

Intuitively, it would be safer to go through two levels of xs:redefine.

Though I have to say whenever I see a schema that uses xs:redefine it brings
back very painful memories of the struggle to get it working at all. My
advice would be to avoid it. There are some potentially very nasty
side-effects, for example if one stylesheet running in a web service
redefines a schema, the effect is pervasive for all other subsequent
transformations importing that schema namespace and using the same schema
cache. Saxon doesn't allow the schema cache to contain two different
components with the same name. I'm hoping the new model for component
identity in 1.1 will address this problem...

Michael Kay
http://www.saxonica.com/


> -----Original Message-----
> From: xmlschema-dev-request@w3.org 
> [mailto:xmlschema-dev-request@w3.org] On Behalf Of Hirtle, David
> Sent: 01 April 2005 15:10
> To: xmlschema-dev@w3.org
> Subject: Both extending and restricting with <redefine>
> 
> 
> (Apologies if this message is received more than once -- yesterday's
> attempt seems to have not gone through.)
> 
> I originally thought that XML Schema didn't permit "replacing" an
> element with another via <redefine>, i.e. both extending and
> restricting a content model, but the spec doesn't seem to forbid doing
> it in two steps... so I whipped up an example.  Unfortunately, I'm
> getting mixed validation results.
> 
> a.xsd (http://www.ruleml.org/0.89/xsd/a.xsd) defines an element "body"
> which allows only the element "x".
> 
> b.xsd (http://www.ruleml.org/0.89/xsd/b.xsd) redefines "body" from
> a.xsd, first extending it to allow a new element "y" and then
> restricting it to disallow "x", effectively replacing "x" with "y" in
> the content model of "body".
> 
> Assuming this is permissible in XML Schema...
> 
> ab.ruleml (http://www.ruleml.org/0.89/exa/ab.ruleml) should not be
> valid w.r.t. b.xsd because "body" contains an "x".
> 
> XSV (web form and installation) reports no validity problems but
> crashes.  Saxon correctly (?) identifies the problem, as appended
> below.
> 
> So I'm left with the question: is this the correct way to "replace" an
> element with another in a content model via <redefine> (if possible at
> all with XML Schema)?  And what about the validators?
> 
> Thanks,
> 
> David
> 
> ***
> 
> java com.saxonica.Validate -t http://www.ruleml.org/0.89/exa/ab.ruleml
> Saxon-SA 8.3 from Saxonica
> Java version 1.5.0_01
> Processing http://www.ruleml.org/0.89/exa/ab.ruleml
> Loading schema document http://www.ruleml.org/0.89/xsd/b.xsd
> Loading schema document http://www.ruleml.org/0.89/xsd/a.xsd
> Finished loading schema document http://www.ruleml.org/0.89/xsd/a.xsd
> Finished loading schema document http://www.ruleml.org/0.89/xsd/b.xsd
> Validation error on line 5 column 4 of 
> http://www.ruleml.org/0.89/exa/ab.ruleml:
> In content of element <body>: The content model does not 
> allow element <x>
> to appear here.
> Expected: {http://www.ruleml.org/0.89/xsd}y
> Validation error on line 7 column 8 of 
> http://www.ruleml.org/0.89/exa/ab.ruleml:
> One or more validation errors were reported
> Validation of source document failed
> 
> 

Received on Friday, 1 April 2005 14:34:37 UTC