- From: Eve L. Maler <Eve.Maler@east.sun.com>
- Date: Wed, 10 May 2000 16:09:43 -0400
- To: www-rdf-interest@w3.org
[Please copy w3c-xml-linking-ig@w3.org on any followups.]
The XML Linking WG is coming close to finalizing the XLink spec. Some have
noticed that there is a lot of similarity between XLink and RDF, in that
XLink links assert relations between resources. In fact, some recent
design tweaks explicitly borrowed some RDF concepts in this area, which has
raised the question of whether links truly can be harvested and
automatically converted into RDF statements.
This message summarizes some earlier offline conversations I've had with
RDFers and proposes such a mapping. If we can iron out the details, there
is still time (barely) to add back the XLink spec appendix on the RDF
mapping, as was originally intended. All of the following material is
based on the most recent (members-only) version of the XLink spec, which is at:
http://www.w3.org/XML/Group/2000/04/WD-xlink-20000418.htm
Many thanks to Sergey Melnick, Stefan Decker, and Ron Daniel for material
and ideas provided in this message. And thanks to the Linking and RDF IGs
in advance for reading and commenting.
* * *
XLink allows you to set up an extended link with as many "local" resources
as you want (subelements inside the link), as many "remote" resources as
you want (hrefs to other things outside), and as many "arcs" as you want
(pairs of resources and a direction, so that you can traverse from one to
the other with XLink-dictated behavior if you want).
Any resource, local or remote, can have a "role" (indicated by a URI). A
role means "this resource has this property," where "property" corresponds
to the RDF notion. Similarly, an extended link can have a role, where it
means "this link has this property." Any arc can also have a role, which
means "starting resource X has ending resource Y with property Z"; this is
equivalent to RDF Property Types (informally known to RDFers as arc labels).
What the spec doesn't say explicitly about the RDF mapping, but I think it
needs to, is that when a resource has a role, the property that's been
pointed to should be understood to have its *own* property: that of being a
"class" in the RDF schema sense.
This RDF-ish stuff is entirely apart from actual traversal; XLink is
primarily meant for traversal, not description. But it's perfectly capable
of being used for pure description, and in fact XLink allows you to leave
off traversal behavior specifications entirely.
Here's the main example that now appears in the XLink spec (the post-Last
Call version cited above). Sample (non-normative) DTD declarations are as
follows:
<!ELEMENT courseload ((tooltip|person|course|gpa|go)*)>
<!ATTLIST courseload
xmlns:xlink CDATA #FIXED
"http://www.w3.org/1999/xlink"
xlink:type (extended) #FIXED "extended"
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED>
<!ELEMENT tooltip ANY>
<!ATTLIST tooltip
xlink:type (title) #FIXED "title"
xml:lang CDATA #IMPLIED>
<!ELEMENT person EMPTY>
<!ATTLIST person
xlink:type (locator) #FIXED "locator"
xlink:href CDATA #REQUIRED
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT course EMPTY>
<!ATTLIST course
xlink:type (locator) #FIXED "locator"
xlink:href CDATA #REQUIRED
xlink:role CDATA #FIXED
"http://www.example.com/linkprops/course"
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT gpa ANY>
<!ATTLIST gpa
xlink:type (resource) #FIXED "resource"
xlink:role CDATA #FIXED
"http://www.example.com/linkprops/gpa"
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT go EMPTY>
<!ATTLIST go
xlink:type (arc) #FIXED "arc"
xlink:arcrole CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (new
|replace
|embed
|other
|none) #IMPLIED
xlink:actuate (onLoad
|onRequest
|other
|none) #IMPLIED
xlink:from NMTOKEN #IMPLIED
xlink:to NMTOKEN #IMPLIED>
Here's a sample instance conforming to these declarations:
<courseload xlink:title="Course Load for Pat Jones">
<person
xlink:href="students/patjones62.xml"
xlink:label="student62"
xlink:role="http://www.example.com/linkprops/student"
xlink:title="Pat Jones" />
<person
xlink:href="profs/jaysmith7.xml"
xlink:label="prof7"
xlink:role="http://www.example.com/linkprops/professor"
xlink:title="Dr. Jay Smith" />
<!-- more remote resources for professors, TAs, etc. -->
<course
xlink:href="courses/cs101.xml"
xlink:label="CS-101"
xlink:title="CompSci 101" />
<!-- more remote resources for courses, seminars, etc. -->
<gpa xlink:label="PatJonesGPA">3.5</gpa>
<go
xlink:from="student62"
xlink:to="PatJonesGPA"
xlink:show="new"
xlink:actuate="onRequest"
xlink:title="Pat Jones's GPA" />
<go
xlink:from="CS-101"
xlink:arcrole="http://www.example.com/linkprops/auditor"
xlink:to="student62"
xlink:show="replace"
xlink:actuate="onRequest"
xlink:title="Pat Jones, auditing the course" />
<go
xlink:from="student62"
xlink:arcrole="http://www.example.com/linkprops/advisor"
xlink:to="prof7"
xlink:show="replace"
xlink:actuate="onRequest"
xlink:title="Dr. Jay Smith, advisor" />
</courseload>
The last two <go> examples above, in pseudo-English, would be read as
follows in order to express their RDF nature:
- "Course CS101 has Pat Jones as an auditor," or "course CS101 has
auditor Pat Jones," or "Pat Jones is auditing course CS101, or "Pat
Jones is an auditor of course CS101." The course resource doesn't
have an official role set, but software could infer that the <course>
element has a certain role, or the vocabulary in which <course>
appears may already have an official role. But as far as XLink is
concerned, it's un-roled. So technically you'd want to take the word
"course" out of these English statements.
- "Student Pat Jones has professor Dr. Jay Smith as an advisor," or
"student Pat Jones has advisor professor Dr. Jay Smith," or "Professor
Dr. Jay Smith is advising Pat Jones," or "Professor Dr. Jay Smith is
an advisor to Pat Jones." In this case, the "student" and "professor"
roles are actually set, such that the relevant instances of <person>
read "Pat Jones is in the class 'student'" and "Dr. Jay Smith is in
the class 'professor'". If there were a role on the whole link, it
would read "This link is in the class 'courseload'" or similar.
Note that there is nothing that stops you from addressing <go> elements as
resources in another link, putting roles on them, and making them take part
in arcs that have arc roles. So it is possible to make "meta-assertions"
about XLink "assertions."
I'll save some other issues and comments for a follow-on message.
Eve
--
Eve Maler +1 781 442 3190
Sun Microsystems XML Technology Center elm @ east.sun.com
Received on Wednesday, 10 May 2000 16:07:37 UTC