Re: RDF* and conjectures

Dear James, 

thank you for your comment and I must say I quite like the dense and curt style you employ. It reminds me of Tacitus. One of the advantages of being a native speaker, I am sure. 

> On 17 Sep 2021, at 11:11, James Anderson <anderson.james.1955@gmail.com> wrote:
> 
> 
>> On 2021-09-17, at 10:43:39, Fabio Vitali <fabio.vitali@unibo.it> wrote:
>> 
>>> ...
>> 
>> The reading of [1] brings us to the conclusion that we DO NOT KNOW if named graphs are asserted.
> 
> this assertion is an unfounded generalization.
> "has not been specified" does not have the same consequences as "do not know", especially in the sense of "cannot know", which underlies the discussion in this thread.

My understanding of "do not know" is not an epistemological "cannot know", but rather a very concrete and practical "there will be situations in which it will be A, and situations in which it will be B, and we will never definitely know which is which". 

>> In fact, of the seven different (and reciprocally incompatible) semantics represented in [1], only one (3.4) behaves as if the content of the named graph is not asserted.
> 
> which leaves this reader disappointedly with the impression that the discussion evidently ignores (3.8).

That is correct. My fault and thank you for pointing it out for me. My initial understanding of 3.8 had a lot to do with the ontological entailments of classes and subclasses (which is where the example brings the reader to), rather than the fact that you could use it for truth evaluation. 

> (which impression agrees with his comprehension of the rdf-star deliberations, in general.)

I am not sure if this is referring to me (that I do not understand rdf-star deliberations) or is a more general statement ("his" refers to "this reader", which in this context is you). 

> yes, absent a definition for dataset construction, there is no way to interpret the chronology example.
> post-3.8, why does that matter?

So let me clarify this: 3.8 suggests we use a ASK WHERE query to verify the truth value of a graph. Thus I add a boolean statement to the example, say:  

GRAPH :conjecture01 {
   :Hamlet dc:creator :WilliamShakespeare .
   :Hamlet dc:created "1603"^^xsd:Year .
}
:conjecture01 prov:wasAttributedTo :SamuelJohnson .
:conjecture01 :isAsserted "true"^^xsd:Boolean.       <--- This says it's true

GRAPH :conjecture02 {
   :Hamlet dc:creator :EdwardDeVere .
   :Hamlet dc:created "1596"^^xsd:Year .
}
:conjecture02 prov:wasAttributedTo :JThomasLooney .

and I am good to go: 

ASK WHERE {
	GRAPH :conjecture01 {
		:Hamlet dc:creator :WilliamShakespeare .
	}
	:conjecture01 :isAsserted "true"^^xsd:Boolean. 
}

is true, while 

ASK WHERE {
	GRAPH :conjecture02 {
		:Hamlet dc:creator :EdwardDeVere .
	}
	:conjecture02 :isAsserted "true"^^xsd:Boolean. 
}

is false. Is this correct?

This is basically devolving to a SPARQL query the task of deciding whether a graph is true or not. So a naive query such as 

SELECT $name WHERE {
	:Hamlet dc:creator ?name .
}

will return both postulations, :WilliamShakespeare and :EdwardDeVere, as results, while in order to obtain only the asserted one I would need to somewhat complicate the query as follows, am I right?  

SELECT $name WHERE {
	GRAPH ?g {
		:Hamlet dc:creator ?name .
	}
	?g :isAsserted "true"^^xsd:Boolean. 
}

That is very cool if truth assertions can be kept at one level only. But let me reformulate the example including two or more levels of indirection: 

":JohnSmith believes in :JThomasLooney's attribution of :Hamlet to EdwardDeVere, while :FabioVitali believes in :SamuelJohnson's attribution to :William Shakespeare, and since I am :FabioVitali this is what I want you to think":

GRAPH :conjecture01 {
   :Hamlet dc:creator :WilliamShakespeare .
   :Hamlet dc:created "1603"^^xsd:Year .
}
:conjecture01 prov:wasAttributedTo :SamuelJohnson .


GRAPH :conjecture02 {
   :Hamlet dc:creator :EdwardDeVere .
   :Hamlet dc:created "1596"^^xsd:Year .
}
:conjecture02 prov:wasAttributedTo :JThomasLooney .

GRAPH :conjecture03 {
	:conjecture02 :isAsserted "true"^^xsd:Boolean.  <--- This is a claimed truth
}
:conjecture03 prov:wasAttributedTo :JohnSmith .

GRAPH :conjecture04 {
	:conjecture01 :isAsserted "true"^^xsd:Boolean.  <--- This is a claimed truth
}
:conjecture04 prov:wasAttributedTo :FabioVitali .
:conjecture04 :isAsserted "true"^^xsd:Boolean.          <--- This is the truth


Which is true? Let's try again with the sophisticated query above: 

SELECT $name WHERE {
	GRAPH ?g {
		:Hamlet dc:creator ?name .
	}
	?g :isAsserted "true"^^xsd:Boolean. 
}

Oh. This returns either nothing, or both :WilliamShakespeare and :EdwardDeVere, but it will not return only :WilliamShakespeare as I expected. I need a further and complex query to do so: 

SELECT $name WHERE {
	GRAPH ?g {
		:Hamlet dc:creator ?name .
	}
	GRAPH ?h {
		?g :isAsserted "true"^^xsd:Boolean. 
	}
	?h :isAsserted "true"^^xsd:Boolean. 
}

which again only works for two levels but not for three, and so on.

So yes, devolving the assertion to SPARQL does work, but, from my point of view, it works only by trusting the end user to ask the right question every time, in the right order, and with the right depth of indirection. 

Or am I missing something?

Thanks

Fabio


--

Fabio Vitali                            Tiger got to hunt, bird got to fly,
Dept. of Computer Science        Man got to sit and wonder "Why, why, why?'
Univ. of Bologna  ITALY               Tiger got to sleep, bird got to land,
phone:  +39 051 2094872              Man got to tell himself he understand.
e-mail: fabio@cs.unibo.it         Kurt Vonnegut (1922-2007), "Cat's cradle"
http://vitali.web.cs.unibo.it/

Received on Friday, 17 September 2021 10:27:32 UTC