- From: David Powell <djpowell@djpowell.net>
- Date: Mon, 21 Jan 2008 19:41:37 +0000
- To: semantic-web@w3.org
I just noticed something about URI-Refs, and I thought I'd share it
here, because it seems to affect a few RDF/XML parsers and the wording
of a few specs. It is an edge-case, but it just bit me, so...
RFC3986 describes how to convert a URI-Ref to a URI by resolving it
against a base-URI. This algorithm always performs the
"remove_dot_segments" step on the relative ref, even if the relative
ref has a scheme, or an absolute path.
This means that RDF such as:
<rdf:Description rdf:about="http://example.com/whatever/../test">
<rdf:value>val</rdf:value>
</rdf:Description>
should parse to:
<http://example.com/test> rdf:value "val" .
if using the RFC 3986 rules. I think.
...but, RDF/XML is based on RFC 2396 and so is xml:base, where the
algorithm doesn't seem to apply remove_dot_segments to absolute
paths. Also xml:base talks about resolving "relative references", and
it isn't clear whether the word "relative" is being descriptive, or
defining a subset of reference.
Interestingly this means that a new-style URI-Ref can't refer to a URI
that contains dot-segments. URIs and absolute URI-Refs look alike,
but are different data-types with different semantics - whether
remove_dot_segments needs to be applied, and it is the spec of where
you put it that determines what to do with dot-segments, rather than
what the construct looks like.
It seems that some RDF parsers convert process dot-segments, and some
don't.
Anyway, this actually has some practical significance, because in
order to handle xml:base in Atom/RDF for GRDDL, I need to be able to
resolve URI-Refs against each other, and as XSLT 1.0 has painful
string handling, my current algorithm outputs possibly absolute
URI-Refs, which possibly contain dot-segments, expecting them to be
resolved, as in RFC 3986. It is looking like this probably isn't
going to work well, and I'm going to have to implement
remove_dot_segments in the XSLT...
--
Dave
Received on Monday, 21 January 2008 19:38:52 UTC