[announce] URF adds named graphs

The latest URF version, 2007-11-22, adds several features. Namespace 
prefix declarations in TURF are now purely syntactical. But most 
significant is the addition of named graphs and the reformulation of 
scoped properties in terms of named graphs. The latest URF specification 
is at:

http://www.urf.name/

Here's a quick overview of URF named graphs. First, let's assert that 
Punxsutawney Phil (the famous groundhog of the American holiday 
Groundhog Day) predicts the weather (as he is supposed to do on 2 
February by whether he sees his shadow in Punxsutawney, Philadelphia):

punx.Phil:
punx:predicts=punx.weather
;

Just like in RDF, we can say that there exists such a proposition ("Phil 
predicts the weather.") without actually asserting that proposition by 
reifying the assertion above:

(urf.Proposition):
urf.subject=punx.Phil,
urf.predicate=punx.predicts,
urf.object=punx.weather
;

TURF now has a nice short form for indicating a proposition using open 
and closed double quotation marks:

“punx.Phil, punx.predicts, punx.weather”

Just to be complete, let's represent that in a TURF document with its 
namespace prefixes declared:

`URF
*
"punx"=<http://example.com/punxsutawney>
*
¤
“punx.Phil, punx.predicts, punx.weather”
.

TURF documents now have a signature (`URF), a special header (surrounded 
by '*') and a body definition ('¤' and '.'); you'll see why in a second.

Now to named graphs, or "knowledge communities" as URF calls them: a 
knowledge community (urf.Community) is a subclass of urf.Set. A 
proposition is said to be asserted by the community if the community 
contains the proposition as one of its elements. So if we were to say 
that there is a knowledge community, Punxsutawney, that believes that 
Punxsutawney Phil predicts the weather, we would represent that in TURF 
as the following:

`URF
*
"urf"=<http://urf.name/urf>,
"punx"=<http://example.com/punxsutawney>
*
¤
punx.Punxsutawney(urf.Community)
{
“punx.Phil, punx.predicts, punx.weather”
}
.

Here the instance of the class urf.Community is what is commonly known 
as a named graph, identified by the URI 
<http://example.com/punxsutawney#Punxsutawney>. The proposition 
"Punxsutawney Phil predicts the weather" is considered to be asserted by 
that community because it appears as an element of the urf.Community 
(which is a subclass of urf.Set).

But URF communities also have short forms in TURF, allowing you to 
indicate the propositions asserted by the community using their 
unreified property=value forms. The URF community short form begins with 
the currency sign '¤' and ends with a full stop '.', which gives us the 
following TURF document semantically identical to the one above:


`URF
*
"urf"=<http://urf.name/urf>,
"punx"=<http://example.com/punxsutawney>
*
¤
punx.Punxsutawney(urf.Community)
¤
punx.Phil:
punx:predicts=punx.weather
.
.

Now you can see why TURF documents have a body consisting of '¤' and 
'.', because in order to make any assertions (even to assert the 
existence of propositions or of other knowledge communities) the 
assertions have to exist in some knowledge community themselves. In URF, 
this "root community" in which all assertions are made in a document is 
called the "instance community" (equivalent to the graph formed by a RDF 
instance).

So what about the special URF "scoped properties" that only are valid 
(or considered asserted) in the context of some other 
subject-predicate-object triple? Each URF proposition (urf.Proposition) 
is a subclass of urf.Community (i.e. each statement is itself a named 
graph), which means that it can contain asserted propositions. An URF 
scoped property, therefore, is an assertion that is part of the 
knowledge community formed by its context assertion.

We can take two scoped properties in the example below (scoped 
properties are now indicated by a grave accent '`' before the equals 
sign '='):

`URF
*
"example"=<http://example.com/example>
*
¤
example.juan:
example.name="John":
example.lang`=example.english
;,
example.weight=#72:
example.unit`=example.kilogram
;
;
.

The propositions "The string "John" is English" and "#72 is in kilogram 
units" are simply propositions that are asserted in the propositions 
(which are knowledge communities) "Juan's name is "John"" and "Juan's 
weight is #72", respectively. If you want to spell it out, the following 
is equivalent (using labeled properties to reify each assertion):

`URF
*
"example"=<http://example.com/example>
*
¤
example.juan:
example.name|juanNameJohn|="John",
|juanNameJohn|
¤
"John":
example.lang=example.english
;
.,
example.weight|juanWeight72|=#72,
|juanWeight72|
¤
#72:
example.unit=example.kilogram
;
.
;
.

Or if you like to reify and unreify everything manually, you can say the 
following, which is also semantically equivalent:

`URF
*
"urf"=<http://urf.name/urf>,
"example"=<http://example.com/example>
*
¤
example.juan:
example.name="John",
example.weight=#72,
“example.juan, example.name, "John"”
{
“"John", example.lang, example.english”
},
“example.juan, example.weight, #72”
{
“#72, example.unit, example.kilogram”
}
;
.

The online URF processor at 
http://www.guiseframework.com/demo/urfprocess can't yet handle all the 
fancy nested URF knowledge communities yet, but it handles almost 
everything else.

Cheers,

Garret

Received on Sunday, 2 December 2007 06:15:18 UTC