- From: Sean B. Palmer <sean+cwm@infomesh.net>
- Date: Sat, 11 Dec 2004 20:36:00 +0000
- To: public-cwm-bugs@w3.org
This is a multibug.
== Bug 1 ==
Passing the following:
# formulae-03.n3 - Test of forAll
@prefix : <http://example.org/#> .
@keywords a .
@forAll p, r .
{ p father [ father r ] }
=> { p grandfather r } .
Into cwm --flatten gives out phantom existentials:
@forSome fo:_g0 .
...
:existentials [ owl:oneOf
( "file:[...]/formulae-03.n3#_g_L7C12" ) ];
:statements [ owl:oneOf ( [
:object [ :uri "http://example.org/#r" ];
:predicate [ :uri "http://example.org/#father" ];
:subject fo:_g0 ] ...
== Bug 2 ==
The composition of output variables is bizarre. I don't understand why
you're giving the URI and variable names as strings... can't you just
return the objects? This makes it unsuitable for testing because, for
example, the strings for the variables a dependent on both the
localnames of the variable and (horror!) the base file/directory of the
tests being run.
== Bug 3 ==
The output is overly verbose. The reification namespace documentation,
currently held in its odd location at http://www.w3.org/2004/06/rei
states that:
A formula is identified by an unordered set of statements, with a
sets of existentially and universally quantified symbols.
If they're unordered, why're you using owl:oneOf and a list of
existentials, universals, and even statements? That makes it impossible
to test against.
Then again the documentation also gives the example:
[ :forAll ( [:uri <#x>] [:uri <#y>]);
:forSome ( [:uri <#a>] [:uri <#b>]);
:statements ( :s1 :s2 :s3 )
]
Which makes even less sense. I'd really like this to be fixed because
I'm using the reify namespace in my test suite for n3proc. For example,
I convert:
# formulae-03.n3 - Test of forAll
@prefix : <http://example.org/#> .
@keywords a .
@forAll p, r .
{ p father [ father r ] }
=> { p grandfather r } .
into: [eek! swap.notation3.BadSyntax: Line 4 of
<file:[...]/formulae-03.nt>: Bad syntax (Can't use ?xxx syntax for
variable in outermost level: ?var2) at ^ in:
"...69statement1 <http://www.w3.org/2000/10/swap/reify#object> ?^var2 .
_:formula3 <http://www.w3.org/2000/10/swap/reify#stat..."
Fine, I'll convert by hand...]
@prefix : <http://example.org/#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix r: <http://www.w3.org/2000/10/swap/reify#> .
[ r:statement
[ r:subject _:node4;
r:predicate :father;
r:object ?var2 ],
[ r:subject ?var1;
r:predicate father>;
r:object _:node4 ] ] =>
[ r:statement
[ r:subject ?var1;
r:predicate :grandfather;
r:object ?var2 ] ] .
Which I think you have to admit is more sensible. Existentials and
universals are done in a similar manner: you have r:existential instead
of r:existentials. Of course, you'll have to allow universals at the
outermost level then, but I don't see a problem with that. I may even
file a separate RFE for it. Note how I omit quantification triples for
variables quantified over the root formula. That's because on the (viz.
my) --flatten output the resulting variables are quantified over the
root formula anyway. So your rule at the moment is "always quantify over
the parent formula", whereas my slightly augmented rule is "always
quantify over the parent formula, or the current one if no parent exists".
Thanks,
--
Sean B. Palmer, http://inamidst.com/sbp/
Received on Saturday, 11 December 2004 20:36:35 UTC