Hash-URI fragments do not have well-defined semantics. In HTML, they are typically used to take the user to a particular point on the page, and are also sometimes used to record application state. In XML and semantic web use, they are used as identifiers that are distinct from the base resource (i.e., without the hash URI fragment), but often contained in the same document (e.g., an RDF/XML element with the corresponding id attribute). In Fedora, they are intended to be descriptions that are distinct from, but dependent on, the base resource.
- Triples whose subject is a hash URI can be added or removed via standard Fedora CRUD operations (POST, PATCH or PUT) on the resource from which the hash URI is derived
- When a resource is updated to include properties on hash URI fragments, they are automatically created.
- Triples whose object is a hash URI can be added or removed via standard Fedora CRUD operations (POST, PATCH or PUT)
- The RDF representation of a repository resource includes all triples from hash fragments associated with it. That is to say, all triples whose subject is a hash URI derived from that resource's URI
- Any repository resource may link to any hash URI regardless of the presence of any triples associated with the hash fragment
- A hash fragment should automatically be deleted when all of the triples that have that fragment as their subject have been deleted
- Hash fragments should be permitted to include zero or more '/' characters
Current implementation - as JCR Nodes
In the current implementation, hash URI fragments are stored on JCR nodes under a special node named
#. So properties about the hash URI fragment
/foo#bar would be attached to the node
- Good - Properties on hash URI fragments can be added and deleted by updating the base resource (POSTing/PUTting RDF, SPARQL Update).
- Bad - References to hash URI fragments are treated the same as references to base resources: they can only be made to existing fragments, and they are automatically removed when the fragment is deleted.
- Good - When a resource is updated to include properties on hash URI fragments, they are automatically created.
- Bad - The only way to delete a hash URI fragment is to delete its base resource – though there is a proposal to address this by automatically deleting them if they have no properties and/or inbound references.
- hash Bad - Hash URIs also may not contain the "/" character, which is different than what RFC 3986 describes as possible with fragment URIs. The current behavior generates a stacktrace with this message: Hash URI resource created with too much hierarchy