ExportingNamingPolicies
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...
- "documents under /kids are suitable for children" (PICS; cf ContentSelection4SemanticWeb)
- "don't bother indexing this page" (e.g. because it's redundant w.r.t. some other view of the same info) (cf Robots Exclusion)
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> </rdf:Description>
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 }.