Re: [relax-ng] Compact syntax issue: namespace declarations

From
James Clark <>
Date
2002-04-11T09:37:43+00:00
ID
Thread
Re: [relax-ng] Compact syntax issue: namespace declarations
>> 2. Solve it by providing a syntax for local namespace declarations, e.g.
>>
>> local {
>>   namespace x = "http://www.example.com/1"
>
> I favor this, with slightly different syntax:
>
> 	local namespace x = "http://www.example.com/1" { ... }
>
> Granted, if you have lots of local namespaces, this makes for
> lots of braces.  So we could allow
>
> 	local namespace x = "foo", y = "bar" { ... }

Using a comma feels inconsistent with other parts of the syntax:

  xsd:number { minInclusive = "2" maxInclusive = "3" }

  elem [ x ="foo" y = "bar" ]

I think this syntax would be OK if it was sufficient to allow such "local" 
expressions only where patterns were allowed.  However, consider something 
like

<text>
  <x:foo xmlns:x="http://www.example.com/1"/>
  <x:foo xmlns:x="http://www.example.com/2"/>
</text>

This would turn into:

[ local namespace x ="http://www.example.com/1" { x:foo [] }
  local namespace x = http://www.example.com/2" { x:foo [] } ] text

Blech! The curly braces will contain different things depending on the 
context of the "local" expression.  Also this is going to cause problems 
with reserved words: at the moment nothing inside square brackets is 
reserved.

An alternative would be to use an XMLish syntax, eg

 [ x:foo [ xmlns:x = "http://www.example.com/1" ]
   x:foo [ xmlns:x = "http://www.example.com/2" ] ] text

or

 xsd:QName { [xmlns:x = "http://www.example.com"] "x:y" }

This only makes sense as a syntax in the context of XML, but I think the 
only reason for providing local namespace declarations is compatibility 
with XML.  It's not a very beautiful syntax, but I think it would be 
unsurprising to users.

James