One of the things we will address in these documents is how to define the URI for the different ontologies we will be creating. I was hoping you could point me to the right direction on where I can find information on best practices to define URIs for ontologies in the Semantic Web. Is there some kind of standard for this?
The following W3 publication offesr some relevant guide-lines:
There are a few choices to be made that depend on technical and administrative factors.
1) The hostname part of the URI: Do you want to use PURLs (purl.org
), do you wish to use existing domain names, or do you want to create a new domain to host the vocabularies? Do you want to have a central site hosting all vocabularies; do you want to have a central site that redirects to hosts managed by individual departments/agencies, etc?
2) The path name for the vocabulary: There are a couple of conventions:
Note that in both of the examples, the namespace contains what at first glance appears to be timestamp or version information; however in both of these cases, the ontology version has changed a great deal, but the namespace has remained constant. The FOAF spec notes:
Much of FOAF now is considered stable. Each release of this specification document has an incrementally increased version number, even while the technical namespace ID remains fixed and includes the original value of "0.1". It long ago became impractical to update the namespace URI without causing huge disruption to both producers and consumers of FOAF data. We are left with the digits "0.1" in our URI. This stands as a warning to all those who might embed metadata in their vocabulary identifiers.
This approach requires the semantics of existing terms in the namespace to remain downwards compatible. If the meaning of a term changes in a way that is not downwards compatible with extant usage then a new namespace is needed. This roughly corresponds to a new major version in a software API.
Just chatting now with Dan, he now favours only adding a version id if a second version is needed. This seems reasonable enough, though from a human factors point of view, there is a danger of accidentally referring to the older version due to accidentally omitting the version part of the namespace.
If a new namespace is needed, then terms that are (absolute LL) identical can be declared 'sameas' and 'equivalent<Foo>' in the new namespace, allowing for partial backwards compatibility.
3) Hash or Slash.
If the vocabulary is small, then the namespace can be declared using a '#' after the ontology name, making term names relative. This allows the whole document to be fetched in a single transaction, and verified with a single cache check. SKOS uses a # namespace.
If the vocabulary is very large, then a '/' namespace is better; only terms that are needed will be fetched, and only modified terms need to be invalidated in a cache. Since vocabulary items can be defined in documents other than those directly matching the namespace URI, you can include closely associated term definitions in individual documents to reduce network latency.
It is possible to mix and match the approaches.
Hope this helps