- 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