The last weeks I was working on my use cases, which should provide me requirements for my prototype. The use cases describe situations in which users want to reuse resources across application boundaries in a controlled and transparent way. In this situations applications must share resources transparently and users need ways to control the sharing process.
To share a resource between applications means for the applications that they must integrate external resources or at least the values of the external resources into their internal structure. Therefore basically three possibilities exist:
1) applications can copy external resources, create new internal resource skeleton and paste the content values of the external resources to the skeleton. The internal resource skeleton is as usual interlinked with the rest of the internal resources.
2) applications can embed external resources, create new internal resource skeleton and embeds the content values of the external resources to the skeleton. The internal resource skeleton is as usual interlinked with the rest of the internal resources.
3) application can interlink external resource with the internal resources simply by references. Therefore the relations between external resources and internal resources must be established and typed. The applications must be able to handle external resources.
Controlling the sharing process means to control which resources are shared between which applications and to control how they are shared, that means defining how the external resources to share or the skeletons, in which they have been embedded or copied, are related with the internal resources (e.g. user identities, content items) stored on the target application
The sharing process must be transparent, because third party application should also be able to find out who shared what with whom. It is important the information about the origin of a resource does not get lost.
First and simplest Use Cases - Semantic Reblogging:
Imagine a user Tim is reading several weblogs. When he reads the posting A on the weblog A, he decides to reblog the posting A on his own weblog.
To reblog posting A Tim opens his favorite browser Mozilla Firefox and navigates to the weblog where the posting A is stored and published.
Tim selects some text on the weblog A, which, I assume for simplicity, belongs exactly to one resource of the type sioc:Item, namely the posting A.
Tim opens the firefox ubiquity command box and types in the command “reblog”, which displays already the URI identifying the selected resource as first parameter.
The “reblog” command requires at least one more parameter, the URI of the target application (in this case the URI of Tim’s personal weblog) where the resource should be reblogged.
Furthermore the “reblog” command has an optional third parameter, the copy-flag. This parameter is optional and by default it is zero. That means that the resources are embedded. If it is 1 the values of the resource are copied. The fourth optional parameter is a collection of context relation triples. This parameter is optional and holds triples which describe the relation between the external resource and the internal resources (for example the triples can express that the external resource can only be read by some users of the target applciation or that the external resource is a reply of an internal target application resource and so on).
Again for simplicity I assume that the target application URI, which is passed as second parameter, identifies a resource from type sioc:Container or sioc:Site.
Use Case 1.1:
The third parameter is set to one. That means that the values of the external resource are copied.
When the command is executed the script asks the user to authenticate on the target application and makes an authenticated remote call of the “reblog” method provided by target application. It passes the URI of the resource to share as parameter for the “reblog” method, which creates a new Blog Posting Skeleton and copies the values of external resource to the associated values of the internal Resource Skeleton. The target application can handle the internally created Resource Skeleton as a normal internally created resource.
Use Case 1.2:
The third parameter is set to zero. That means that the values of the external resource are embedded.
When the command is executed the script asks the user to authenticate on the target application and makes an authenticated remote call of the “reblog” method provided by target application. It passes the URI of the resource to share as parameter for the “reblog” method, which creates a new Blog Posting Skeleton and embeds the URIs of external resource into the Resource Skeleton. I am not sure what would be the best way to do this. Normally a resource should be embedded in the content of another resource. But the sioc:content property only holds literals as value. Properties like sioc:embeds have been proposed in http://sioc-project.org/node/226 , but are not part of the SIOC Core Ontology.
In the case of embedding external resource references, the target application must be able to deference URIs and display parts of the resource description as embedded content.
In all cases (i.e. no matter if external resources are copied or embedded) it should be clear for humans and machines who has reused the resource, when has it be reused and what is the origin of the resource. That means that the HTML page must mark the external resource as external and must show the origin of the resource and who reblogged it when. Also the RDF Graph of the site must expose that a newly created resource (Reblog Skeleton) embeds one or more external resources.