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: Guarded normal form (part 1)



I think I made it, although it has to be cooked better.


First, let me change the notation from

Pos{foo}<...> to foo{Pos}<...>


<choice> and <intersection>(concur) are symmetric operations, so I
choose to use them (and <not>) for the algorithm. As I wrote,
<diff> A B </diff> => <intersection> A <not> B </not> </intersection>.




1. <choice> NC1 NC2 </choice>
------------------------------------------------
case NC1=PosSet<...> & NC2=PosSet<...>
    return PosSet< union of Namespaces >;
    
    if two Namespaces foo<S>{X} and foo<T>{Y} collide,
    switch(S,T){
    case Pos,Pos
        => foo{Pos}<X \cup Y>
    case Pos,Neg
        => foo{Neg}<Y-X>
    case Neg,Neg
        => foo{Neg}<X \cap Y>

case NC1=PosSet<A> & NC2=NegSet<B>
    return NegSet< B >
    if A and B has a common Namespace, do as above.

case NC1=NegSet<...> & NC2=NegSet<...>
    return NegSet< intersection of Namespaces >
    if two Namespaces collide, do the same as above.


2. <intersection> NC1 NC2 </intersection>
------------------------------------------------
case NC1=PosSet<...> & NC2=PosSet<...>
    return PosSet< intersection of Namespaces >;
    
    for every collided Namespace foo{S}<X> and foo{T}<Y>,
    switch(S,T){
    case Pos,Pos
        => foo{Pos}<X \cap Y>
    case Pos,Neg
        => foo{Pos}<X-Y>
    case Neg,Neg
        => foo{Neg}<X \cup Y>

case NC1=PosSet<A> & NC2=NegSet<B>
    return PosSet< A >
    if A and B has a common Namespace, do as above.

case NC1=NegSet<...> & NC2=NegSet<...>
    return NegSet< union of Namespaces >
    if two Namespaces collide, do the same as above.


3. <not> NC </not>
------------------------------------------------
case NC=PosSet<...>
    return NegSet< negated Namespaces >
case NC=NegSet<...>
    return PosSet< negated Namespaces >
    
    To negate Namespace: foo{Pos}<a,b,...>  => foo{Neg}<a,b,...>
                         foo{Neg}<a,b,...>  => foo{Pos}<a,b,...>




--
Kohsuke KAWAGUCHI                          +1 650 786 0721
Sun Microsystems                   kohsuke.kawaguchi@eng.sun.com



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


Powered by eList eXpress LLC