[relaxng-user] trang and xsd-friendly schemas

Bruce D'Arcus bdarcus at fastmail.fm
Mon Sep 13 08:02:00 ICT 2004

On Sep 13, 2004, at 7:42 AM, G. Ken Holman wrote:

>> I would like to be able to get a clean XSD using Trang.
> I see the above two requirements as irreconcilable.  You can have one 
> or the other, but you cannot have both.
>> Trang will convert the current schema to XSD, but when I try to 
>> validate an instance against it, I get errors related to the 
>> following original RNC patterns:
> Sure you do ... all of the errors that were reported make sense to me 
> and I couldn't express them any better myself.  You've asked for 
> non-XSD semantics in XSD syntax, so unsurprisingly you are going to 
> get errors reported regarding what is or is not allowed in the 
> semantics of a document model described by XSD.

I'm sure you got a hint in my message that I recognize there are things 
that XSD cannot express.  Nowhere was I suggesting (or even vaguely 
hinting) that Trang was at fault.

I'm not asking for complete fidelity; I'm asking for the best strategy 
to use in designing the schema to create a reasonable approximation in 

James gave me the following off-list comment (I had emailed him asking 
why the list wasn't working):

> I would suggest that you create two RELAX NG schemas:
> A. One taking full advantage of RELAX NG features
> B. One sticking relatively close to the functionality of XSD
> Make A include B and override the parts where RELAX NG can do better.
> Then use B to generate the XSD.

So is the original non-deterministic because chapter would also be a 
valid attribute value in the second pattern below?

RefType-Chapter = element reftype {
    attribute name { "chapter" },
## Beyond the mandatory definitions, the list of reference types
## is uncontrolled.
RefType = element reftype { attribute name { text },
    attribute inherit-from { text }?,
    attribute group { "yes" }?,

And once I adjust that to convert properly, what else do I avoid using 
in B?

With regard to interleave in RNG, ould a good alternative be something 
like this in B ...

	( A | B | C )*

... and then I can override with interleave in A?


More information about the relaxng-user mailing list