Hello Ivan, Thanks for your detailed reply on issues in implementing the Statement assertions.
On Jan 6, 2008 5:39 PM, Ivan Mikhailov <imikhai...@openlinksw.com> wrote: > > 1. Virtuoso uses quad store, not triple store so DESCRIBE implementation > should find graphs that contain data about subject before producing > actual result. For the sake of performance it will not even try to find > absolutely all graphs that may be useful. If one graph contains > Statements whereas other contains plain triples, should we stop search > for graphs if only one of them is found? If we should stop, which graph > should take priority? I dont really understand this. Are you saying that if one graph contains :st a rdf:Statement; rdf:subject :foo; rdf:predicate :pred; rdf:object :obj . and another graph contains the triple, :foo :pred :obj . then should the search stop if one of them is found ? I would say no ... because the graph containing triples may have addl triples as well: :foo :pred :obj; rdf:label "foo" . Similiarly for graph with Statements ... So, as you can see, i dont really understand that issue :/ > > 2. It should be possible to configure whether rdf:Statements are > expected in the database. This is important because some applications > prefers to get DESCRIBE result that is a strict subset of the database > in order to add only statements that are not stored already or to make a > 'diff' between data that are really stored in different sources. hmm agreed there, > 3. Are rdf:Statements always stored in native-form quads or they may > come from RDF Views? > > 4. May native-form quads contain rdf:Statements about subjects generated > by RDF Views? Sorry, I have not experimented with rdf views ... > 5. Do all four triples of { ?ST a rdf:Statement ; rdf:subject ?s > rdf:predicate ?p ; rdf:object ?o } always come from same graph or they > can come from up to four separate graphs? In my application, they would all appear in the same graph. Personally, I dont see how a graph can be self consistent if for e.g., it contains only: :st a rdf:Statement; :st rdf:subject :foo . and expect other graphs to contain the predicate and object. > 6. If there are only three triples, { ?ST rdf:subject ?s > rdf:predicate ?p ; rdf:object ?o } but not { ?ST a rdf:Statement }, > the DESCRIBE routine "MUST"/ "MUST NOT" / "MAY" return { ?s ?p ?o } in > the result set. Please suggest appropriate verb, 'RFC style'. I would say, the triple assertion should happen iff :st isa rdf:Statement (i.e., also subclasses of rdf:Statement). Im sure experts will disagree with me about it, but my preference would be for MUST NOT, in the absence of any rule in (future) ruleset which asserts { ?ST rdf:subject ?s; rdf:predicate ?p ; rdf:object ?o } => { ?ST a rdf:Statement } ... On a related note, does Virtuoso support some way (say predicate in bif: namespace) to test/iterate-over container members ? I.e., I want to do following: :list rdf:first :blah; rdf:rest [ rdf:first :blah1; rdf:rest .... ] . then, select ?o where { :list bif:containerMember ?o .} should return the following bindings: :blah, :blah1, :blah2 .... I think, list and more importantly tree support in an RDF database would be a killer application. ie., select ?o where { :tree bif:treeNode ?o } select ?o where { :tree bif:treeLeaf ?o } and fitlers to restrict to particular tree levels ... Anyway, I guess some/all of these things are already possible in virtuoso ... i have yet to read all the docs. Another problem I have is that for some reason the HTML/JSON/Javascript result format returns bnodes with an id of nodeID://<somenumber> but the RDF/XML result format returns in :b<somenumber> for various queries... it would be great if it were possible to somehow unify the two allowing me to issue further queries in a recursive manner to retrieve the contents of the entire list/tree. Its a very good thing that bnode ids are stable in Virtuoso. If I am in error in anything I wrote above, please do respond because I'd like to learn more about it ... Regards Rajeev J Sebastian