- From: David Wood <david@3roundstones.com>
- Date: Mon, 22 Jul 2013 12:34:54 -0400
- To: Eric Prud'hommeaux <eric@w3.org>
- Cc: Sandro Hawke <sandro@w3.org>, Ivan Mikhailov <imikhailov@openlinksw.com>, W3C RDF WG <public-rdf-wg@w3.org>
- Message-Id: <1614AA97-6A7C-49DB-8554-FE23E5C22F05@3roundstones.com>
On Jul 22, 2013, at 08:50, Eric Prud'hommeaux <eric@w3.org> wrote:
> * Sandro Hawke <sandro@w3.org> [2013-07-22 08:12-0400]
>> On 07/21/2013 05:43 AM, Ivan Mikhailov wrote:
>>> On Tue, 2013-07-16 at 20:53 -0400, Sandro Hawke wrote:
>>>> I know this is going to seem to some people like it's going too far,
>>>> but it seems to me like such a good idea, in good conscience I have to
>>>> at least seriously propose it. If there aren't at least three +1's
>>>> for this email, I wont mention it again.
>>>>
>>>> Right now, in TriG, you can say things like:
>>>> [ a :Patch;
>>>> :deletes _:g1;
>>>> :inserts _:g2 ].
>>>> GRAPH _:g1 { ... }
>>>> GRAPH _:g2 { ... }
>>>> I think it would make a whole lot of sense to allow a little syntactic
>>>> sugar. I'd like to allow this:
>>>> [ a :Patch;
>>>> :delete { ... };
>>>> :inserts { ... } ].
>>> I'm sorry, the syntax { triple . triples . triples ... } is in use for
>>> blank node formulas in some dialects.
>>>
>>> SQL> TTLP ('<s> <p> { <s1> <p1> <o1> , <o2> } .', 'http://example.com/',
>>> 'http://example.com/');
>>>
>>> SQL> sparql define output:format "NICE_TTL" with <http://example.com/>
>>> construct where { ?s ?p ?o };
>>> fmtaggret-NICE_TTL
>>> LONG VARCHAR
>>> _______________________________________________________________________________
>>>
>>>
>>> @prefix ns0: <http://example.com/> .
>>> @prefix ns1: <http://www.w3.org/2000/10/swap/reify#> .
>>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
>>>
>>> ns0:s
>>> ns0:p [ ns1:statement [ rdf:type
>>> rdf:Statement ;
>>> rdf:object ns0:o1 ;
>>> rdf:predicate ns0:p1 ;
>>> rdf:subject ns0:s1
>>> ] ,
>>> [ rdf:type
>>> rdf:Statement ;
>>> rdf:object ns0:o2 ;
>>> rdf:predicate ns0:p1 ;
>>> rdf:subject ns0:s1 ]
>>> ] .
>>> ns0:s1
>>> ns0:p1 ns0:o1 , ns0:o2 .
>>
>> So you like the syntax, you just want to use it for RDF Reification
>> instead of RDF Datasets. If we didn't have datasets, I'd probably
>> like that design a lot.
>>
>> But this is TriG, which is a dataset syntax. If people want to use
>> RDF Reification, then it seems to me TriG is not the right language
>> for them.
>>
>>
>>>
>>> So I'd strongly insist on disambiguation keyword like
>>>
>>> [ a :Patch;
>>> :delete GRAPH { ... };
>>> :inserts GRAPH { ... } ].
>>>
>>> or something like that if the feature is ever introduced.
>>
>> Alternatively, OpenLink could use a keyword for this reification
>> extension, like ":delete REIFIED { ... }" or (in keeping with the
>> encoding you're using) ":delete STATEMENTS { ... }". That would
>> have a much better chance of being accepted in SPARQL some day, I
>> think. It seems pretty unlikely to me that a future SPARQL WG would
>> ever endorse this extension, with its use of reification, the way
>> you have it.
>
> +1 to Sandro's priorities and proposal.
+1 from me as well (chair hat 'off') without making any comment on the reification suggestions.
Regards,
Dave
--
http://about.me/david_wood
>
>
>> Of course, what I really wish is that we could really solve the
>> underlying problem by making Datasets and Reification be
>> interoperable. I don't know a way to do that, technically, since
>> reification is referentially transparent and datasets are
>> referentially opaque. Maybe no one cares about that distinction,
>> and we can just by fiat make Reification also opaque, with some
>> magical handwaving. The idea is to somehow end up with:
>>
>> <s> <p> ?x.
>> ?x rdf:subject <s1>;
>> rdf:predicate <p1>;
>> rdf:object <o1>.
>>
>> being somehow equivalent to (and interoperable with):
>>
>> <s> <p> ?x.
>> GRAPH ?x { <s1> <p1> <o1> }
>>
>> (for all ?x). Anyone think that's possible?
>
> Yes, but we need an extra arc in between:
>
> <s> <p> ?x. ?x rdf:hasStatement ?y
> ?y rdf:s <s1>; rdf:p <p1>; rdf:o <o1>.
>
> because ?x might contain multiple statements. The SPARQL graph syntax
> simply gives you no access to the reifification label ?y . In
> principle, the predicate where I placed rdf:hasStatement can define
> lots of useful relationships like log:includes, but if we want
> practical closure of the graph, e.g. mylog:comprisedOf, we don't have
> any way of closing the set. Of course, we could complicate then
> relationship by using Collections,
>
> <s> <p> ?x. ?x rdf:hasStatementList/rdf:rest*/rdf:first ?y
> ?y rdf:s <s1>; rdf:p <p1>; rdf:o <o1>.
>
> but that's kinda miserable syntactically and might not be necessary
> for most use cases.
>
>
>> -- Sandro
>>
>>> Best Regards,
>>>
>>> Ivan Mikhailov
>>> OpenLink Software
>>> http://virtuoso.openlinksw.com
>>>
>>>
>>>
>>
>>
>
> --
> -ericP
>
Attachments
- application/pkcs7-signature attachment: smime.p7s
Received on Monday, 22 July 2013 16:35:21 UTC