[relaxng-user] A question on content models
James Clark
jjc at jclark.com
Wed Sep 24 14:01:10 ICT 2003
K. Ari Krupnikov wrote:
> I have a master RNG file that describes general properties of my
> grammar, and individual RNG files that describe individual
> elements. The master file <include>s the individual ones.
>
> The master file has declarations like
>
> <define name="class.filter">
> <notAllowed/>
> </define>
>
> Individual files usually say something like
>
> <define combine="choice" name="class.reader">
> <element name="switch">
> <!-- CM -->
> </element>
> </define>
>
> I use this as a kind of type system. Individual content models may
> contain
>
> <zeroOrMore>
> <ref name="class.filter"/>
> </zeroOrMore>
>
>
> Question 1: is this a good way of
> doing things in RELAX NG, or should I consider a better alternative?
It seems good to me. The only disadvantage is that it may make your
schemas harder to understand. You have to weigh that against the better
modularity it gives you.
> Question 2: I need to add declarations that would be common to all
> members of a particular class. An obvious way is to have every element
> <ref> the common declarations (a group of attributes in this
> case). Can I do it in one place? DTDs don't provide such a mechanism,
> XSD does (thought inheritance).
Even with inheritance in XSD, you have do do something on every element
(namely declare it to have an appropriate type). You can do this in
RELAX NG by
- having a definition for each type
- having each type reference the definition of its base type
- having the pattern for each element of that type reference the
definition for its type (the ref to this definition is serving the same
role as the type attribute in XSD)
James
More information about the relaxng-user
mailing list