- 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