OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

relax-ng message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Subject: Re: What exactly is prohibited by the constraint of RELAX NG?


James Clark wrote:

> I've mean struggling over the weekend to find a way to express our good
> constraints.  The best way I've found so far is to transform into the normal
> form described at:

Thank you very much.  I am sorry for not being able to write mine.  I am afraid 
that I lost the draft.

Here are my understanding and comments.

1. #string

>string ::= 
>    <text/>
>    | <data ...>...</data>
>    | <value .../>

Let Atm be a finite set of <text/>, <data ...>...</data>, and
<value>...</value>.  This set is finite, but we can always assume that
all <data ..>..</data>, or <value>...</value> in a given grammar is
contained by Atm.  Atm stands for atomic.

Any #string str represents an element of Atm.  Conversely, any
element of Atm can be represented by some #string str.

2.  #tokens

Sequences of <text/>, <data...>..</data>, or <value .../> matches a
#tokens.  As far as 

>tokens ::=
>    string
>    | <oneOrMore> tokens </oneOrMore>
>    | <group> tokens tokens </group>
>    | <interleave> tokens tokens </interleave>
>    | <choice> tokens tokens </group>
>    | <choice> <empty/> tokens </group>

Any #tokens tks represents a regular language over Atm.  Conversely,
any regular language over Atm can be represented by some #tokens tks.

Q0: Why do we need <empty/> here?

3. #value

<text/>, <data...>..</data>, <value .../>, and <list>...</list> 
maches a #value.  (We could disallow <text/>.)

>value ::= 
>    string
>    | <list> tokens </list>
>    | <list> <empty/> </list>
>    | <choice> value value </choice>
>    | <choice> <empty/> value </choice>

Let Domain be the union of (a) the power set of Atm and (b) the class
of regular languages over Atm.  Every d in Domain is captured by some
value v.  Conversely, any value v represents some d in Domain.

Q1: Why do we need <list> <empty/> </list>?

Q2: <choice> <list> tokens1 </list> <list> tokens2 </list> </choice>
can always be captured by <list> <choice>tokens1 tokens2 </choice>
</list>, should we prohibit the former?  (Probably not)


4. #mixed

A sequence of non-terminals and <text/> matches a #mixed.

>mixed ::=
>    <ref name="name"/>
>    | <text/>
>    | <group> mixed mixed </group>
>    | <interleave> mixed mixed </interleave>
>    | <choice> mixed mixed </choice>
>    | <choice> <empty/> mixed </choice>
>    | <oneOrMore> mixed </oneOrMore>

A #mixed m represents a content model.  Note that <data ...>...</data>
and <value .../> are disallowed.  <oneOrMore><text/></oneOrMore> is
allowed.

Let Nt be a set of non-terminals.  This set is finite, but we can
always assume that all non-terminals in a given grammar are cotained
by Nt.  Nt stand for Non-terminals.

Any regular set over the union of {<text/>} and Nt is represented by
some mixed m.  Conversely, mixed m represents some regular set over
the union of {<text/>} and Nt.


5. singleAttributeGroup ::=

An attribute (e.g., foo="") matches a #singleAttributeGroup.  A sequence 
of more than one attribute does not.

>singleAttributeGroup ::=
>    <attribute> nc value </attribute>
>    | <attribute> nc <empty/> </attribute>
>    | <choice> <empty/> singleAttributeGroup </choice>
Note: the end tag is fixed
>    | <choice> singleAttributeGroup singleAttributeGroup </choice>
Note: the end tag is fixed

Let NC be a set of URI+localNames, and let Att be the product of NC
and Domain.  A name class nc represents a subset of NC, but some
subsets of NC are not captured by any name classes.

A singleAttributeGroup sap represents a subset of the union of Att and
{<empty/>}.

Note that <attribute>nc <empty/> </attribute> is required, since value
cannot represent the empty string or sequence.

Q3: I do not understand why we need <choice> <empty/>
singleAttributeGroup </choice>.  If we did not have that,
singleAttributeGroup capture a subset of Att.

6. attributeGroup

A collection of attributes matches an #attributeGroup.

>attributeGroup ::=
>    singleAttributeGroup
>    | <oneOrMore> singleAttributeGroup </oneOrMore>
>    | <group> attributeGroup attributeGroup </group>
>    | <interleave> attributeGroup attributeGroup </interleave>
>    | <choice> attributeGroup attributeGroup </choice>
>    | <choice> <empty/> attributeGroup </choice>

Q4:  Can we simply allow <empty/> as attributeGroup?  Then, 
we do not need <choice> <empty/> attributeGroup </choice>.

Q5:  Or, can we simply disallow <empty/> here?

An attributeGroup ag represents a mapping from some finite subset of
NC to Domain.

7. repeatable

Either a collection of attributes or a sequence of non-terminals 
and <text/> matches a #repeatable.

In my understanding, the only reason we need #repeatable 
is that we allow <oneOrMore> to have both mixed content models 
and <attribute> at the same time.  Having seen this comlexity, 
I would propose to disallow such <oneOrMore>.

>repeatable ::=
>    mixed
>    | singleAttributeGroup
>    | <choice> repeatable repeatable </choice>
>    | <choice> <empty/> repeatable </choice>
>    | <oneOrMore> repeatable </oneOrMore>

8. pattern

>pattern ::=
>    attributeGroup
>    | value
>    | repeatable
>    | <choice> pattern pattern </choice>
>    | <choice> <empty/> pattern </choice>
>    | <group> attributeGroup pattern </group>
>    | <group> pattern attributeGroup </group>

//This disallows <group>value1 value2</group>

>    | <interleave> attributeGroup pattern </interleave>
>    | <interleave> pattern attributeGroup </interleave>

//This disallows <interleave>value1 value2</interleave>


Here is my counter proposal.

pattern ::=
    attributeGroup
    | value
    | mixed
    | <choice> pattern pattern </choice>
    | <choice> <empty/> pattern </choice>
    | <group> attributeGroup pattern </group>
    | <group> pattern attributeGroup </group>
    | <interleave> attributeGroup pattern </interleave>
    | <interleave> pattern attributeGroup </interleave>

Cheers,

Makoto


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Powered by eList eXpress LLC