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: [relax-ng] Flaw of the RELAX NG specification


1. Problem statement

not(..) is used in (anyName 2), (nsName 2), (data 2), and 
(element).  However, not(...) is not formally defined. 

What is provable in a proof system?  A formular is provable if and
only if it is an axiom or it is a consequent of an inference rule
whose antecedents are provable.  However, we do not have any inference 
rules to prove not(....).  I think that this is a flaw of the specification 
(although it has no impacts on implementations).

I can think of two solutions.  One is to introduce extra predicates 
such as "notin" and provide inference rules for them.  These predicates 
and inference rules are uninteresting for implementors.  The other is 
to take the (naive) set theory for granted, and define the set of 
names represented by a nameclass as well as the set of strings permitted 
by <data> or <value>.  


2. Introduction of extra predicates

To give an idea of the second approach, here is a rough sketch 
for a rewrite of 6.1 by introducing "notin".

n notin nc
	asserts that name n is not a member of name class nc 

(anyName 2)

n notin nc
-------------------------------------------------------------------
n in <anyName> <except> nc </except> </anyName> 

(nsName 2)

name( u, ln ) notin nc 
------------------------------------------------------------------ 
name( u, ln ) in <nsName ns="u"> <except> nc </except> </nsName> 
 

(name 1)

------------------------------------------------------------------ 
name( u, ln ) in <name ns="u"> ln </name> 

(name 2)

ln1 != ln
------------------------------------------------------------------ 
name( u1, ln1 ) notin <name ns="u"> ln </name> 

(name 3)

u1 != u
------------------------------------------------------------------ 
name( u1, ln1 ) notin <name ns="u"> ln </name> 

 
(name choice 3)

n notin nc1    n notin nc2 
------------------------------------------------------------------
n notin <choice> nc1 nc2 </choice> 


Although this approach works for name classes, I do not think that it 
is a right solution.  I have tried this for <data> and <value> and 
the result is very complicated.


3. Set-theortic

In this approach, we take the naive set theory for granted.  
I think that this approach is natural and easy to understand.

3.1 Name classes (6.1)

Let U be the set of URIs, and LN be the set of local names.

The extension of a nameclass (denoted L(n), where n is a nameclass) is
inductively defined below:

	L(<anyName/>) = U \times LN

	L(<anyName> <except> nc </except> </anyName>) = 
		(U \times LN) \setminus L(nc)

	L(<nsName ns="u"/>) = {u} \times LN

	L(<nsName ns="u">  <except> nc </except> </nsName>) = 
		({u} \times LN) \setminus L(nc)

	L(<name ns="u"> ln </name>) = {u} \times {ln}

	L(<choice> nc1 nc2 </choice>) = L(nc1) \cup L(nc2)
 
In inference rules such as (attribute) or (element)
we write "n \in L(nc)" rather than "n in nc".

3.2 <data> and <value> (6.2.8)

In the para before 6.2.1, I would write "the sequence m of elements
and strings" rather than "the sequence of elements and strings m".

1) Notations

L(u,ln,params,cx) 

	The set of strings allowed by u,ln,params, and cx.

=[u,ln]

	An equivalence relation of string-context pairs that is defined 
	by a datatype (u, ln)

2) Axioms and inference rules

(value)

(s1, cx1) =[u,ln] (s2, context(u2, cx2))        s2 \in L(u1, ln, (), cx2) 
--------------------------------------------------------------------------
cx1 |- { }; s1 =~ <value datatypeLibrary="u1" type="ln"
                       ns="u2" [cx2]> s2 </value> 


(data 1)

L(<data datatypeLibrary="u" type="ln"> params </data>) = L(u,ln,params,cx) 

(data 2)

L(<data datatypeLibrary="u" type="ln"> params
                       <except> p </except> </data>)

 = L(u,ln,params,cx) \setminus L(p)


(data 3)

s \in L(<data datatypeLibrary="u" type="ln"> params </data>)
--------------------------------------------------------------
cx |- { }; s =~ <data datatypeLibrary="u" type="ln"> params </data> 
 
(data 4)

s \in 
 L(<data datatypeLibrary="u" type="ln"> params <except> p </except> </data> )
--------------------------------------------------------------
cx |- { }; s =~ <data datatypeLibrary="u" type="ln"> params <except> p </except> </data> 


3.3 String sequences (7.2)

Remove incorrectSchema()

For any <element> nc p </element> in a grammar, pattern 
p must have some content-type ct, i.e., p :c ct.

Cheers,

Makoto


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


Powered by eList eXpress LLC