From W3C Wiki
Jump to: navigation, search

URI opacity is a principle SemanticWebArchitecture inherits from general Web Architecture (cf. The Web Model: Information hiding and URI syntax, Jan 1998 by TimBL). The information in a URI is, in general, hidden from clients.

For example, while there's a widely deployed _server-side_ convention that filenames ending in .html are exported as HTML (i.e. labelled text/html in HTTP replies), clients aren't licensed to infer from ".html" on the end of a URI that all/any representations of the resource are HTML documents. The server has every right to serve up a PNG image in response to requests for /abc.html .

But suppose the server owner wanted to broadcast to the world that it observes the ".html means HTML" convention? That's not a very likely case in practice, but there are deployed technologies for saying...

Section 3.4. Containers Defined By A URI Pattern from the RDF '99 spec was a somewhat general mechanism to accomodate these cases; the example given is:

<rdf:Description aboutEachPrefix="http://foo.org/doc">
 <s:Copyright>© 1998, The Foo Organization</s:Copyright>

This seems to be a case of premature standardization:

On 1st June 2001, the WG decided that aboutEachPrefix would be removed from the RDF Model and Syntax Recommendation on the grounds that there is a lack of implementation experience, and it therefore should not be in the recommendation. A future version of RDF may consider support for this feature. -- Issue rdfms-abouteachprefix

The URISpace submission in 2001 sketched another design for BreakingURIOpacity. mine it for examples/use cases?

The Semantic Web Application Platform (SWAP) introduces a general purpose property, log:uri, that relates a thing to a URI used to identify it. Combining log:uri with ordinary str:startsWith string utility functions and a ShorthandRDF rule syntax, we can express the example as:

{ ?DOC log:uri [ str:startsWith "http://foo.org/doc" ] } =>
  { ?DOC s:Copyright "© 1998, The Foo Organization" }.

This technique is used to express privacy and access control policies in an actual production system at W3C:

# keeps only mailbox info we know are shareable
{ v:org contact:mailbox v:mailbox.
  v:mailbox contact:archive v:archive.
  v:archive log:uri [ string:startsWith "http://lists.w3.org/Archives/Public/" ].
} log:implies {
  v:org contact:mailbox v:mailbox.
  v:mailbox contact:archive v:archive.

excerpted from public-groups-filter.n3.

Note that some aspects of this rule can be expressed using just the ontology layer:

{ ?DOC log:uri [ str:startsWith "http://foo.org/doc" ] } =>
  { ?DOC a :CopyrightFoo }.

:CopyRightFoo owl:onProperty s:Copyright;
  owl:hasValue "© 1998, The Foo Organization".

combined with the owl axiom:

{ ?R owl:onProperty ?p; owl:hasValue ?y. ?x a ?R }
  => { ?x ?p ?y }.