- From: Garret Wilson <garret@globalmentor.com>
- Date: Sat, 01 Dec 2007 22:13:54 -0800
- To: Semantic Web <semantic-web@w3.org>
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