- From: Mark Birbeck <mark.birbeck@formsPlayer.com>
- Date: Thu, 15 Nov 2007 14:21:23 +0000
- To: RDFa <public-rdf-in-xhtml-tf@w3.org>
Hello all,
The following is a general explanation of 'chaining' which is
important for the discussion on @instanceof. I know everyone is
busy :) so if you don't feel the need to read it, don't! But the
separate thread on the use of @instanceof with chaining assumes the
approach to 'chaining' which is outlined here.
As it happens, the only major difference in terms of the
specification is that in our current rules we don't support this
scenario, which I suggest we should:
<div about="#me" rel="foaf:knows">
<div about="http://www.w3.org/People/Ivan/#me"
property="foaf:name" content="Ivan Herman" />
</div>
However, I do also explain the idea of 'alignment' which is something
that helps in the @instanceof context.
CHAINING
The idea of chaining was to allow the object of one statement and the
subject of another to 'match', making mark-up easier to write. For
example, instead of writing this (where the object of the first
statement is exactly the same as the subject of the second):
<div about="#me"
rel="foaf:knows" resource="http://www.w3.org/People/Ivan/#me" />
<div about="http://www.w3.org/People/Ivan/#me"
property="foaf:name" content="Ivan Herman" />
we can write this (where the subject of the second statement is set
by the object of the first):
<div
about="#me"
rel="foaf:knows" resource="http://www.w3.org/People/Ivan/#me"
>
<div property="foaf:name" content="Ivan Herman" />
</div>
This is well understand by everyone, I think, and is already included
in the current RDFa syntax document. However, the original principle
of chaining also allowed for a couple of other ways of expressing the
same thing.
MISSING OBJECT
One is this (where the subject of the second statement sets the
object of the first):
<div about="#me" rel="foaf:knows">
<div about="http://www.w3.org/People/Ivan/#me"
property="foaf:name" content="Ivan Herman" />
</div>
This ability to use two different techniques shows why I called the
whole thing chaining in the first place; it's like the links in a
chain, where the end of one is the beginning of another. The *goal*
was this:
A predicate1 B predicate2 C predicate3 D ... etc.
For example:
I know Ivan, who works for the W3C, which is based in Boston ... etc.
As you can see, looked at from the point of view of the statements,
it doesn't matter whether B is set via @resource, @href, @about, or
whatever. In other words, the following two 'patterns' are identical
in _meaning_:
<div about="A" rel="p1">
<div about="B" rel="p2" resource="C" />
</div>
<div about="A" rel="p1" resource="B">
<div rel="p2" resource="C" />
</div>
I believe this to be an important foundation of RDFa, because if you
have a number of ways of saying the same thing, you get the
flexibility to mark statements up in a way that draws attention to
whichever aspect of the hierarchy you want to promote (just like
using a spoken language).
Also--and perhaps more importantly--by giving flexibility in the mark-
up it means that you can simply 'drop in' objects from other
documents or sources; if you have a number of different ways of
expressing the same thing, then you can 'bend' your mark-up to
accommodate the mark-up that you are incorporating.
ANONYMOUS NODES IN CHAINING
I said there were "a number" of ways of writing the same thing, and
so far I've only given two:
<div about="A" rel="p1">
<div about="B" rel="p2" resource="C" />
</div>
<div about="A" rel="p1" resource="B">
<div rel="p2" resource="C" />
</div>
The final way of writing the same thing is in the case where you
don't care what 'B' is, and so you can drop both the subject _and_
the object from the middle:
<div about="A" rel="p1">
<div rel="p2" resource="C" />
</div>
This still gives us the 'A predicate1 B predicate2 C predicate3 D'
structure that we had before, but now we might have bnodes in the
positions 'B', 'C', 'D'...or wherever we want.
SUBJECT/OBJECT ALIGNMENT
Now that we see what the desirable syntax is, we can have a look at
what rules we are missing from RDFa syntax to make it possible. The
key one is that @rel with no object should 'align' itself with the
next subject, i.e., we are missing a rule for this scenario:
<div about="A" rel="p1">
<div about="B" rel="p2" resource="C" />
</div>
Note that the other two permutations, both of which have no _subject_
on the second statement, are already covered in RDFa, and look like
this:
<div about="A" rel="p1">
<div rel="p2" resource="C" />
</div>
<div about="A" rel="p1" resource="B">
<div rel="p2" resource="C" />
</div>
So the main rule that we used to have in RDFa, and that we need here,
is that a @rel without an object doesn't _always_ create a bnode, but
it _does_ always cause subject/object alignment, i.e., it creates
chaining.
UNNECESSARY TRIPLES
As it happens, the original rules were slightly more subtle than
this; in our current RDFa syntax document the following will actually
create a triple:
<div about="A" rel="p1" />
but it seems pretty pointless to say that A has a property of an
anonymous node, when that anonymous node has no properties. So an
additional rule we need is to only generate this relationship when we
get the next part of the chain, which is one of these two patterns:
<div about="A" rel="p1">
<div about="B" rel="p2" resource="C" />
</div>
<div about="A" rel="p1">
<div rel="p2" resource="C" />
</div>
@INSTANCEOF
Note that none of the examples I have given above have included
@instanceof, since this has nothing to do with chaining as such--I've
dealt with that in a separate post. In this one I wanted to merely
explain the ideas behind 'chaining', introduce the concept of
'alignment', and motivate the need to reinstate the 'missing rule'
for alignment.
Regards,
Mark
--
Mark Birbeck, formsPlayer
mark.birbeck@formsPlayer.com | +44 (0) 20 7689 9232
http://www.formsPlayer.com | http://internet-apps.blogspot.com
standards. innovation.
Received on Thursday, 15 November 2007 14:21:54 UTC