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

 


Help: OASIS Mailing Lists Help | MarkMail Help

relax-ng-comment message

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


Subject: Re: [relax-ng-comment] Duplicate Attributes


If you have say a

 <name ns="">foo</name>


and

 <anyName><except><nsName ns=""/></except></anyName>

then there is no conflict because there is no name that is a member of both 
name classes: the name class <name ns="">foo</name> contains a single name, 
which has local name "foo" and namespace URI ""; since this name belongs to 
<nsName ns=""/>, it does not belong to <anyName><except><nsName 
ns=""/></except></anyName>.

In order to implement the rule on duplicate attributes you have to be able 
to figure out whether the intersection of two arbitrary name classes is 
empty. Here's some pseudo-code for one way to do it:

boolean overlaps(NameClass nc1, NameClass nc2) {
  for x in walk(nc1) union walk(nc2)
     if (contains(nc1, x) and contains(nc2, x))
        return true;
  return false
}

String MAGIC = "\0" // any string that is not a legal URI nor a legal name

Set(Name) walk(NameClass nc) {
  switch (NameClass nc) {
  case <name ns="x">y</name>: return { name(x, y) };
  case <nsName ns="x"/> : return { name(x, MAGIC) };
  case <nsName ns="x"><except>e</except></nsName>:
     return { name(x, MAGIC) } union walk(e);
  case <anyName/> : return { name(MAGIC, MAGIC) };
  case <anyName><except>e</except></anyName>:
    return { name(MAGIC, MAGIC) } union walk(e);
  }
}


--On 02 November 2001 18:38 +1100 Gary Stephenson <garys@ihug.com.au> wrote:

> Hi all,
>
> I am currently implementing a Relax NG processor in the Xbase++ language
> (using the pytrex.py module by James Tauber as an initial guide).
>
> I am having trouble with the restriction in section 7.3 regarding
> Duplicate Attributes.
>
> I find that when attempting to validate the rngSchema.rng file, I get a
> duplicate attribute error, wherby by a "name" attribute in one branch of a
> group is clashing with an "anyname" (with exceptions) attribute in the
> other. The group in question is the child of the element child of the
> "define-element" define.  That is, after transforming to the simplified
> syntax, I get:
>
>     ( DEFINE - define-element :
>         ( ELEMENT
>
>             ( EXPANDED-NAME : {,define} )
>             ( T_Group :
>                 ( ATTRIBUTE :
>                     ( EXPANDED-NAME : {,name} )
>                     ( DATA : NCName )
>                 )
>                 ( T_Group :
>                     ( T_Group :
>                         ( T_Choice :
>                             ( T_Empty )
>                             ( ATTRIBUTE :
>                                 ( EXPANDED-NAME : {,combine} )
>                                 ( T_Choice :
>                                     ( VALUE : choice )
>                                     ( VALUE : interleave )
>                                 )
>                             )
>                         )
>                         ( T_Group :
>                             ( T_Choice :
>                                 ( T_Empty )
>                                 ( ATTRIBUTE :
>                                     ( EXPANDED-NAME : {,ns} )
>                                     ( DATA : anyURI )
>                                 )
>                             )
>                             ( T_Group :
>                                 ( T_Choice :
>                                     ( T_Empty )
>                                     ( ATTRIBUTE :
>                                         ( EXPANDED-NAME :
> {,datatypeLibrary} )                                         ( DATA :
> anyURI )
>                                     )
>                                 )
>                                 ( T_Choice :
>                                     ( T_Empty )
>                                     ( T_OneOrMore :
>                                         ( ATTRIBUTE :
>                                             ( ANY-NAME - except :
>                                                 ( T_NameClass_Except :
>                                                     ( T_NSName )
>                                                     ( T_NSName )
>                                                 )
>                                             )
>                                             ( T_Text )
>
>         etc..
>
> What is wrong here.  Should the "anyName-with-exceptions" attribute match
> the attribute "name"?  If not, why not?  If so, then what else might I be
> doing wrong?
>
> many tias,
>
> gary
>
>
> ----------------------------------------------------------------
> To subscribe or unsubscribe from this elist use the subscription
> manager: <http://lists.oasis-open.org/ob/adm.pl>
>
>




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


Powered by eList eXpress LLC