For each scenario, we find N3 data illustrating the scenario. The decisions and alternatives we have are taken into account.
Claudia and Berit had their wedding in Holland.
<nepomuk:/ctx/4eeefb6b-adc6-406a-a8c4-7244f14ef9c1> {
<nepomuk:/res/34c4c7c8-cb05-11de-8a39-0800200c9a66> a nco:Contact ; nco::fullName "Claudia" ; nepo:hasSource <xmpp://claudia@jabber.org/> <nepomuk:/res/c075bca0-11f2-4df7-8969-90203bb87d18> a nco:Contact ; nco::fullName "Berit" ; nepo:hasSource <xmpp://berit@jabber.org/> <nepomuk:/res/790a5084-2420-41fd-aa2a-d183d3c0fd79> a nco:Contact ; nco::fullName "Dirk" ; nepo:hasSource <xmpp://dirk@jabber.org/>
}
Claudia wants to have access to Dirk's rating and other annotations.
The system sends an email including the pictures and their metadata.
# Claudia's wedding event as it is in her calendar <nepomuk:/ctx/606282b1-cb04-11de-8a39-0800200c9a66> { <nepomuk:/res/606282b0-cb04-11de-8a39-0800200c9a66> a ncal:Event; nie:plainTextContent "Our wedding, everyone is invited"; nie:title "Claudia's and Berit's wedding"; ncal:dtstart <urn:uuid:9f56840d-de5b-43ba-be6f-c7d0e7097272>; <urn:uuid:9f56840d-de5b-43ba-be6f-c7d0e7097272> ncal:dateTime "2009-11-06T12:00:00.000+01:00"^^xsd:dateTime . ncal:dtend <urn:uuid:9f56840d-de5b-43ba-be6f-c7d0e7097273>; <urn:uuid:9f56840d-de5b-43ba-be6f-c7d0e7097273> ncal:dateTime "2009-11-08T19:00:00.000+01:00"^^xsd:dateTime . } <nepomuk:/ctx/606282b1-cb04-11de-8a39-0800200c9a66-metadata> { <nepomuk:/ctx/606282b1-cb04-11de-8a39-0800200c9a66> a nrl:InstanceBase ; nao:created "2009-06-03T08:19:18.465Z"^^xsd:dateTime; nao:creator <nepomuk://claudia@example.org/res/606282b3-cb04-11de-8a39-0800200c9a66>. <urn:nepomuk:local:eb343fa9-47ec-4dae-b8d0-fb10c7b63f3d-metadata> a nrl:GraphMetadata ; nrl:coreGraphMetadataFor <urn:nepomuk:local:eb343fa9-47ec-4dae-b8d0-fb10c7b63f3d> . } # Dirks request # Dirk sends claudia a email, sms, text, jabber, whatever - # "Hey, share that wedding with me" # Claudia answers by sending him a "KDE open social whatever" answer # using Jabber and/or email containing the following RDF ... exactly the same RDF as above. # Dirk includes it in his local store. ... exactly the same RDF as above. # Dirk is looking at his calendar and wants to get updates from claudia on the event. SELECT ?source WHERE { GRAPH ?c {<nepomuk:/res/606282b0-cb04-11de-8a39-0800200c9a66> ?_p ?_o. } {?c nao:creator ?source.} } result: claudia ?c = <nepomuk://claudia@example.org/res/606282b3-cb04-11de-8a39-0800200c9a66> call: JABBER GET CBD AROUND <nepomuk:/res/606282b0-cb04-11de-8a39-0800200c9a66> FROM nepomuk://claudia@example.org/
One year later the data should still be accessible.
Source in uri: <nepomuk:/ctx/13577> { <nepomuk:/res/34c4c7c8-cb05-11de-8a39-0800200c9a66> a nco:Contact ; nco::fullName "Claudia" . <nepomuk:/res/e8a68b30-cb04-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture1.jpg" ; nao:hasTag [ a nao:Tag ; nao:prefLabel "embarrassing" ] , [ a nao:Tag ; nao:prefLabel "berit" ] , [ a nao:Tag ; nao:prefLabel "claudia" ] ; nao:creator <nepomuk:/res/34c4c7c8-cb05-11de-8a39-0800200c9a66> . <nepomuk:/res/34c4c7c1-cb05-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture2.jpg" ; nao:hasTag [ a nao:Tag ; nao:prefLabel "young" ] ; nao:creator <nepomuk:/res/34c4c7c8-cb05-11de-8a39-0800200c9a66> } Fulfills req Source as nepo:hasSource: <nepomuk:/ctx/13577> { <urn:uuid:4c4c7c8-cb05-11de-8a39-0800200c9a66> a nco:Contact ; nco::fullName "Claudia" ; nepo:hasSource <xmpp://claudia@jabber.org/> . <urn:uuid:e8a68b30-cb04-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture1.jpg" ; nepo:hasSource <xmpp://claudia@jabber.org/> ; nao:hasTag [ a nao:Tag ; nao:prefLabel "embarrassing" ] , [ a nao:Tag ; nao:prefLabel "berit" ] , [ a nao:Tag ; nao:prefLabel "claudia" ] ; nao:creator <urn:uuid:4c4c7c8-cb05-11de-8a39-0800200c9a66> . <urn:uuid:34c4c7c1-cb05-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture2.jpg" ; nepo:hasSource <xmpp://berit@jabber.org/> ; nao:hasTag [ a nao:Tag ; nao:prefLabel "young" ] ; nao:creator <urn:uuid:4c4c7c8-cb05-11de-8a39-0800200c9a66> } Fulfills req Source in graphs: <nepomuk://claudia@jabber.org/ctx/6121> { <urn:uuid:34c4c7c8-cb05-11de-8a39-0800200c9a66> a nco:Contact ; nco::fullName "Claudia" ; nepo:hasSource <xmpp://claudia@jabber.org/> } <nepomuk://claudia@jabber.org/ctx/09851> { <urn:uuid:e8a68b30-cb04-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture1.jpg" ; nao:hasTag [ a nao:Tag ; nao:prefLabel "embarrassing" ] , [ a nao:Tag ; nao:prefLabel "berit" ] , [ a nao:Tag ; nao:prefLabel "claudia" ] ; nao:creator <urn:uuid:4c4c7c8-cb05-11de-8a39-0800200c9a66> } <nepomuk://berit@jabber.org/ctx/5513> { <urn:uuid:34c4c7c1-cb05-11de-8a39-0800200c9a66> a nepo:Image ; nepo:file "/wedding/picture2.jpg" ; nao:hasTag [ a nao:Tag ; nao:prefLabel "young" ] ; nao:creator <urn:uuid:4c4c7c8-cb05-11de-8a39-0800200c9a66> }
Now Claudia wants to find all pictures that depict herself and Berit.
Use example data in previous section.
SELECT ?picture FROM * WHERE { ?picture a nepo:Image ; nao:hasTag [ nao:prefLabel "berit", "claudia" ] }
Works for all three cases
<nepomuk:/ctx/08933dfb-cd33-498d-84c1-2db1d83e5af4> { <nepomuk:/res/edf808e5-9036-4292-90b4-d90e975ac117> a xesam:File ; a nfo:FileDataObject ; nao:lastModified "2009-08-26T10:53:38.966Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; nie:plainTextContent "asdf123"^^<http://www.w3.org/2001/XMLSchema#string> ; xesam:url "/home/claudia/networkkey.txt"^^<http://www.w3.org/2001/XMLSchema#string> ; xesam:fileExtension "txt"^^<http://www.w3.org/2001/XMLSchema#string> ; nie:isPartOf <file:///home/claudia> ; nie:contentSize "7"^^<http://www.w3.org/2001/XMLSchema#unsignedInt> ; nie:url <file:///home/claudia/networkkey.txt> ; nao:created "2009-08-26T10:53:38.516Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> . } <nepomuk:/ctx/08933dfb-cd33-498d-84c1-2db1d83e5af4-metadata> { <nepomuk:/ctx/08933dfb-cd33-498d-84c1-2db1d83e5af4> a nrl:InstanceBase> ; nao:created "2009-11-06T17:26:55.223Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; nao:creator <nepomuk:/res/Claudia> ; strigi:indexGraphFor <nepomuk:/res/edf808e5-9036-4292-90b4-d90e975ac117> . <nepomuk:/ctx/08933dfb-cd33-498d-84c1-2db1d83e5af4-metadata> a nrl:GraphMetadata ; nrl:coreGraphMetadataFor <nepomuk:/graph/08933dfb-cd33-498d-84c1-2db1d83e5af4> . }
Claudia has rated and tagged the files. Dirk integrates the files into his own system and changes tags and ratings. Later he needs to determine which music Claudia likes because he will act as the DJ at her wedding.
<nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4> { <nepomuk:/res/04f64db3-f4b8-4d09-a537-bcd143fab70c> a nfo:FileDataObject ; a nmmMusicPiece ; nco:creator <nepomuk:/res/Mika> ; nie:title "Grace Kelly"^^<http://www.w3.org/2001/XMLSchema#string> ; xesam:fileExtension "mp3"^^<http://www.w3.org/2001/XMLSchema#string> ; nie:mimeType "audio/mpeg"^^<http://www.w3.org/2001/XMLSchema#string> ; nie:url <file:///home/claudia/Music/Mika.mp3> ; nfo:fileName "Mika.mp3"^^<http://www.w3.org/2001/XMLSchema#string> ; nao:rating "9" ; nao:hasTag <nepomuk:/res/nice> ; nao:hasTag <nepomuk:/res/love> . } <nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4-metadata> { <nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4> a nrl:InstanceBase> ; nao:created "2009-11-06T17:26:55.223Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; nao:creator <nepomuk:/res/Claudia> ; strigi:indexGraphFor <nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4> . <nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4-metadata> a nrl:GraphMetadata ; nrl:coreGraphMetadataFor <nepomuk:/ctx/14fc3d4b-c150-4e57-991c-b876b26248d4> . } <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723> { <nepomuk:/res/04f64db3-f4b8-4d09-a537-bcd143fab70c> nao:hasTag <nepomuk:/res/toplayatwedding> ; nao:rating "6" . } <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723-metadata> { <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723> a nrl:InstanceBase> ; nao:created "2009-11-06T17:26:55.223Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; nao:creator <nepomuk:/res/Dirk> ; strigi:indexGraphFor <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723> . <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723-metadata> a nrl:GraphMetadata ; nrl:coreGraphMetadataFor <nepomuk:/ctx/c3703e3b-d0dc-4c1c-a2f4-11e4aa081723> . }
Dirk will run a SPARQL query like the one below, to get the songs rated >= 8 by Claudia.
select ?song where { { ?song a nmm:MusicPiece } graph ?g { ?song nao:rating ?rating . FILTER xsd:int(?rating) >= "8"^^xsd:int } { ?g nao:creator <nepomuk:/res/Claudia> } }
Current state of data in KDE4:
<urn:A> { <file:///home/foobar/someimage.jpg> a nfo:Image ; nao:desciption "Ugly!" . } <urn:B> { <urn:B> a nrl:GraphMetadata . <urn:A> a nrl:IntanceBase ; nao:created "2009-11-05T...."^^xsd:dateTime . } <urn:C> { <file:///home/foobar/someimage.jpg> nao:rating 5 . } <urn:D> { <urn:D> a nrl:GraphMetadata . <urn:C> a nrl:IntanceBase ; nao:created "2009-11-06T...."^^xsd:dateTime . }
Todo
To exclude one property we would need privacy settings on the property level. This would mean storing each property in its own graph which is not done in KDE at the moment (but would be easy to achieve).
Then we could easily mark the nao:description as non-public.
He needs the music files to be untraceable to him. However he still wants ratings and tags to be preserved.
He wants to share work information using his SAP ID and wedding pictures using his personal ID.
The information about who wrote which comment is preserved.
When he comes home he syncs his phone again and the tags are synced, too.
The phone gives results from his home computer with optional access to download them.