W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > April to June 2004

RE: RDF Graph Patterns

From: Pat Hayes <phayes@ihmc.us>
Date: Mon, 17 May 2004 15:32:55 -0500
Message-Id: <p06001f12bccecb405532@[]>
To: "Seaborne, Andy" <andy.seaborne@hp.com>
Cc: RDF Data Access Working Group <public-rdf-dawg@w3.org>

>-------- Original Message --------
>>  From: Pat Hayes <mailto:phayes@ihmc.us>
>>  Date: 17 May 2004 18:37
>>  > RDF Graph Patterns::
>>  >
>>  > An RDF Graph Pattern is a description of a set of RDF subgraphs.  If
>>  > an RDF graph is in the set then it is said to match the graph pattern.
>>  >
>>  Sound too general to me. For example, one can describe RDF graphs
>>  using reification, but I wouldnt want to count that as a 'pattern'.
>>  Suggest instead your first example as a suitable definition of pattern.
>I didn't mean that only patterns describe a set of subgraphs but I take your
>>  > (If anyone can define 'match' further without getting into defining
>>  > the expressiveity of the pattern, do suggest something).
>>  >
>>  > c.f regular expressions and strings - and we get to define the
>>  > expressivity of the graph pattern expression language.
>>  >
>>  > Example: Simple case::
>>  >
>>  > RDF Graphs are defined in http://www.w3.org/TR/rdf-concepts/ in terms
>>  > of RDF triples.  An RDF triple pattern is an RDF Triple with the
>>  > addition that subject, predicate or object can be a named query
>>  > variable as well as the items defined in "RDF Concepts".  An RDF Graph
>>  > Pattern is a set of RDF Triple Patterns.
>>  That would be my definition, not an example.
>What about variable length paths e.g. ?x -> <p>* -> ?y (if we want to have
>them of course).

Well, I'd call that a special kind of variable, but I see that it 
doesnt fall under that definition. OK, here's a second try.

An RDF graph pattern is defined relative to a set of variable types 
and binding mappings, and is some entity which may contain some 
number of variables and which yields an RDF graph when a binding 
mapping is applied to those variables. Variables of a given type may 
be restricted to certain kinds of binding. A simple example is an RDF 
graph in which some URIrefs have been replaced by variables, and a 
binding mapping takes a variable to a URIref or literal.

>  A suitable defn os set membership might be OK but it seems
>a bit contorted.
>(A whiteboard at WWW would sort this out)

Yes, except I won't be there.

>>  >
>>  > A match is an association of RDF graph labels and the variables, such
>>  > that substituting the labels for variables yields an RDF subgraph of
>>  > the source RDF graph.
>>  >
>>  > In matching, if a query variable is used in more than one triple
>>  > pattern, and/or more than once in a single triple pattern, it must be
>>  > bound to the same label in any one query solution.
>>  That should be part of the definition of 'substitute for a variable'.
>>  It kind of falls out of he way that RDF graphs syntax is defined in
>>  terms of sets rather than as expressions.
>>  >
>>  > Discussion::
>>  >
>>  > This is the conjunctive form of graph patterns : its an RDF graph with
>>  > some of the subject/predicate/object replaced by query variable (not
>>  > bNodes of the graph).  If we have disjunction in any form, then just a
>>  > graph-with-variables isn't enough - we need a construction to express
>>  > disjunction or (maybe) reify the query pattern.
>>  Or think of it as a set of query graph patterns.
>>  >
>>  > This does not say anything about restricting labels matched by value
>>  > or lexical form.  There may well be syntactic sugar to make this
>>  > easier to write but it is equivalent to putting a variable (not part
>>  > of the results for the variable binding case) into the graph pattern
>>  > and, separately, writing an expression limiting the range of values
>>  > for the label.
>>  True, but we could accommodate that into this definition of pattern
>>  by allowing 'variables' to be more highly structured things, like
>>  describing sorted quantification as quantification over sorted
>>  variables.
>Just to check I understand here: we then need operators to pick out the
>parts of the variables: e.g. lang(?x) to get the lang tag

Right, or maybe we can think of the variables as having internal 
structure (so the operators are just selectors). Whatever.

>(minor question: what is the type of a lang tag?  String?).

It doesnt really have a type specified. I guess if it did have one it 
would have to be xsd:string, yes.  Or maybe some special subclass of 

>>  >
>>  > I'd like to see a building block being a conjunctive graph pattern
>>  > with a set of restrictions on labels.
>>  Sounds about right to me, though I think we need to be very careful
>>  to describe those restrictions appropriately. One kind of useful
>>  restriction might be to a datatype, to constrain literal bindings (?).
>>  Pat
>>  >
>>  >	Andy

IHMC	(850)434 8903 or (650)494 3973   home
40 South Alcaniz St.	(850)202 4416   office
Pensacola			(850)202 4440   fax
FL 32501			(850)291 0667    cell
phayes@ihmc.us       http://www.ihmc.us/users/phayes
Received on Monday, 17 May 2004 16:32:57 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:19 GMT