-
Notifications
You must be signed in to change notification settings - Fork 3
Verbs owl:Class vs. rdf:Property
Let's focus on follow verb
Activity Streams 2.0 Vocabulary already defines an instance of owl:Class
- as:Follow
Activity Streams 2.0 pull request #191: Add collection properties and relationship types. This pull request proposes few new properties related to concept of following:
- as:relationships
- as:isFollowing
- as:isFollowedBy
- http://www.w3.org/TR/2015/WD-activitystreams-vocabulary-20150722/#dfn-follow
- https://github.com/jasnell/w3c-socialwg-activitystreams/blob/22490a1832952faaf99d9cdacd7a0506fe4543f0/activitystreams-vocabulary/activitystreams2.owl#L797
Currently this class doesn't seem to have any other purpose than filter activity by particular verb. AS 2.0 doesn't depend on RDF Schema based inference so we don't need it for defining rdfs:domain and rdfs:range of properties.
While AS 2.0 Vocabulary already defines as:Follow, we find need to add two additional properties to express following relationships. One can find strong discouragement from TimBL to define inverse properties. I will present later how defining of verbs as instances of rdf:Property addresses this problem.
While it provides way to follow your nose to collection of all objects with rdf:type including as:Relationship, it doesn't provide way to filter by particular type of relationship. I will present later how defining of verbs as instances of rdf:Property can address this problem.
I propose defining verbs as instances of rdf:Property seeing many benefits to such approach.
Used as value of as:action rather than rdf:type!
It allows to filter activity by particular verb in almost exact the same way. For example in javascript
activity.action.includes('follow')
instead of
activity['@type'].includes('Follow')
in addition it provides easy 'dot notation' without issues related to aliasing in JSON-LD context "type": "@type"
Defining follow verb as rdf:Property doesn't require defining additional properties like as:isFollowing and as:isFollowedBy. One can just use it as value of as:relationship and swap as:object and as:subject to use it in desired direction!
Defining follow verb as rdf:Property allows reusing it in similar way as in qualified relations. For example in ldp:DirectContainer as value of either ldp:hasMemberRelation or ldp:isMemberOfRelation
NOTE: since Social WG currently explores possibility of ignoring httpRange-14, I choose not to get into distinction between ldp:DirectContainer and ldp:IndirectContainer!
Also we can use follow your nose approach by following ldp:membershipResource in reverse direction, instead of need to define new as:relationships. Thanks to JSON-LD embedding we can also filter discover containers by verb without need to retrieve them.
list of people someone follows
container['ldp:hasMemberRelation'].includes('follow')
list of people who follow someone
container['ldp:isMemberOfRelation'].includes('follow')
TODO
- https://github.com/schemaorg/schemaorg/issues/137 ** !!! https://github.com/schemaorg/schemaorg/issues/137#issuecomment-56270890 (and Gregg's reply)
- https://github.com/schemaorg/schemaorg/pull/514
xAPI community currently works on modeling verbs as instances of rdf:Property
- Reification
- Defining N-ary Relations on the Semantic Web
- Linked Data Paterns ** Qualified Relation ** N-ary Relation