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

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   Re: [xml-dev] RelaxNG question

[ Lists Home | Date Index | Thread Index ]

Tim Bray wrote:

> Dare Obasanjo wrote:
> 
>> Anyway the point is that there are XML vocabularies that have this 
>> characteristic which unfortunately cannot be described by any of the 
>> popular XML schema languages. 
> 
> 
> I'm probably missing something, but it seems on the face of it that you 
> can disallow non-namespaced names in RelaxNG.
> 
> namespace NoNS = ""
> 
> HasNS = element * - ( NoNS:* )
> {
>   attribute * { text }*,
>   mixed { HasNS* }
> }
> 
> element package { mixed HasNS* }



Not sure that'll work. I get a syntax error for the last line there, 
but the HasNS structure blows out to:

     <define name="HasNS">
       <element>
         <anyName>
           <except>
             <nsName ns=""/>
           </except>
         </anyName>
         <zeroOrMore>
           <attribute>
             <anyName/>
           </attribute>
         </zeroOrMore>
         <mixed>
           <zeroOrMore>
             <ref name="HasNS"/>
           </zeroOrMore>
         </mixed>
       </element>
   </define>

[sorry, I'm not great with the rnc]

which allows children to be in the parent namespace against the 
fragments I'll playing with. I changed it to include the specd namespace

     <define name="HasNS">
       <element>
         <anyName>
           <except>
             <nsName ns=""/>
             <nsName ns="http://www.example.com"/>
           </except>
         </anyName>
         <zeroOrMore>
           <attribute>
             <anyName/>
           </attribute>
         </zeroOrMore>
         <mixed>
           <zeroOrMore>
             <ref name="HasNS"/>
           </zeroOrMore>
         </mixed>
       </element>
   </define>


and blew this out:

   namespace local = ""
   namespace ns1 = "http://www.example.com";

   HasNS =
    element * - (local:* | ns1:*) {
      attribute * { text }*,
      mixed { HasNS* }
    }

which I think stops non-ns names (why I am doing this? ;) and the 
specified ns on the parent. Full structures with all the other 
attribute stuff attached.

Bill de hÓra

-- 
Technical Architect
Propylon
http://www.propylon.com
<?xml version="1.0"?>
<grammar 
  xmlns="http://relaxng.org/ns/structure/1.0"; 
  >  
  <start>
    <ref name="anyWithNS"/>
  </start>
  
  <define name="anyWithNS">
    <element name="grammar" ns="http://www.example.com";>
      <zeroOrMore>
        <attribute>
          <anyName>
          </anyName>  
        </attribute>
      </zeroOrMore>
       <zeroOrMore>
         <choice>
           <text/>
           <ref name="inverseNS" />
         </choice>
       </zeroOrMore>
    </element>
  </define>
  <define name="HasNS">
    <element>
      <anyName >
        <except>
          <nsName ns=""/>
            <nsName ns="http://www.example.com"/>
        </except>
      </anyName >
      <zeroOrMore>
        <attribute>
          <anyName>
            <except>
              <nsName ns="" />
              <nsName ns="http://www.example.com"; />
            </except>
          </anyName>  
        </attribute>
      </zeroOrMore>
      <zeroOrMore>
        <choice>
          <text/>
          <ref name="HasNS" />
        </choice>
       </zeroOrMore>
    </element>
  </define>
</grammar>
namespace local = ""
default namespace ns1 = "http://www.example.com";

start = anyWithNS
anyWithNS =
  element grammar {
    attribute * { text }*,
    (text | inverseNS)*
  }
HasNS =
  element * - (local:* | ns1:*) {
    attribute * - (local:* | ns1:*) { text }*,
    (text | HasNS)*
  }




 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS