On 01/09/13 10:06, Dave Reynolds wrote:
Hi Claude,
On 01/09/13 08:36, Claude Warren wrote:
I am a bit confused. I was under the impression that a predicate had
to be
a URI (not anon and not literal) node. This seems to be enforced by the
graph writing code but not by the graph code itself. Should not the graph
code thrown an exception when a non-URI node is used as a predicate?
Or is
the writer too strict?
It is the Model/Statement layer which enforces "syntactic" constraints
like that, plus the writers.
The Graph/Triple/Node storage layer deliberately omits those checks,
implementing what some people call "generalized RDF".
This has several benefits. It keeps the storage layer uniform and
simple, it allows the reasoners to construct intermediate results which
are outside the RDF model constraints, it allows for possible change to
the RDF model. In particular the notion of allowing bnodes as predicates
was discussed and postponed at the previous round of standardization and
has certainly been discussed in the current round (especially in the
context of JSONLD) - though I don't know its current status.
Dave
Not specific to Graph, but they also arise in SPARQL and rules as
intermediate forms.
{
?s ?p ?o .
?z ?o ?w .
}
put anything into a predicate position if done as a substitutions-tyle
execution (which will then not match the graph).
Being about to reuse the graph/triple/node code is quite valuable.
Andy