Skip to content

Proposal: Named Node Expressions

Kurt Cagle edited this page Jun 21, 2024 · 27 revisions

Overview

A named node expression is a proposal made to extend the Turtle language in order to make certain Turtle expressions more compact and referenceable. It is an alternative that is intended to address several critical use cases currently under consideration by the RDF-Start Working Group

Definition

A named node expression is a way of assigning an IRI or named blank node to a given data structure in Turtle. It does not change the underlying RDF - there are no changes required to the RDF specification - but it does provide a way to simplify specific data structures, and to provide a unifying syntax for working with what had previously been anonymous nodes.

The syntax for a named node expression is an IRI or named blank node followed by the symbol "=>", usually when applied at the beginning of a brace expression "[]", a linked list expression "()" a reifer expression "<<>>" or a graph expression "{}". In general the syntax indicates that the named URI or blank node provided should be used as a reference to each of these.

Brace Expressions

An anonymous brace expression resolves as an anonymous node that take the corresponding internal predicates and objects. For instance,

Person:JaneDoe Person:hasName [ Name:firstName "Jane" ; Name:lastName "Doe" ; a Name: ]. 

This resolves to an anonymous node expression in RDF:

Person:JaneDoe Person:hasName _:a1234.
_:a1234 Name:firstName "Jane" .
_:a1234 Name:lastName "Doe" .
_:a1234 a  Name: . 

in which _:a1234 is a system-defined anonymous node that is determined at parse time.The anonymous node here, because it is system defined, cannot be referred to by another triple.

A named brace node has a similar structure, but incorporates a specified IRI. For instance,

Person:JaneDoe Person:hasName [Name:JaneDoeName => Name:firstName "Jane" ; Name:lastName "Doe" ; a Name: ]. 

resolves to

Person:JaneDoe Person:hasName Name:JaneDoeName .
Name:JaneDoeName Name:firstName "Jane" .
Name:JaneDoeName Name:lastName "Doe" .
Name:JaneDoeName a  Name: . 

The expression

[:namedNode => :p1 :o1 ; :p2 :o2 ; ...] .

is a named Node expression that evaluates to the single node :namedNode.

:namedNode :p1 :o1 .
:namedNode :p2 :o2 .
...

Such an expression can be used in either the subject, predicate or object position as follows:

As object:

:s :p [:namedNode => :p1 :o1 ; :p2 o2 ; ...] .

This evaluates to

:s :p :namedNode .
:namedNode :p1 :o1 .
:namedNode ;p2 :o2 .
...

Example:

As given above, the following named brace expression

Person:JaneDoe Person:hasName [Name:JaneDoeName => Name:firstName "Jane" ; Name:lastName "Doe" ; a Name: ].
Name:JaneDoeName a Name; Entity:dateStart "1998-03-07" ; Entity:dateEnd "2021-11-05".

As predicate:

:s [:namedNode => :p1 :o1 ; :p2 o2 ; ...] :o .

This evaluates to

:s :namedNode :o .
:namedNode :p1 :o1 .
:namedNode ;p2 :o2 .
...

As subject:

[:namedNode => :p1 :o1 ; :p2 o2 ; ...] :p :o .

This evaluates to

:namedNode :p :o .
:namedNode :p1 :o1 .
:namedNode ;p2 :o2 .
...

Note in the case of a subject replacement of a named node expression, this defaults to the expression:

:namedNode :p1 :o1 ; :p2 o2 ; ... ; :p :o .

Composition

A named node expression can be composed within another named expression. For instance,

Clone this wiki locally