Merge branch 'main' of https://repo.prod.meissa.de/meissa/activity-pub-poc
This commit is contained in:
commit
d50a2cf5dc
11 changed files with 221 additions and 51 deletions
|
@ -1,6 +1,18 @@
|
|||
- [receipts to transform ttl to spec](#receipts-to-transform-ttl-to-spec)
|
||||
- [**a**](#a)
|
||||
- [**rdfs:range**](#rdfsrange)
|
||||
- [**rdfs:domain**](#rdfsdomain)
|
||||
- [owner is **a** type](#owner-is-a-type)
|
||||
- [owner is a **owl:unionOf** types](#owner-is-a-owlunionof-types)
|
||||
- [Further infos](#further-infos)
|
||||
- [RDF/S](#rdfs)
|
||||
- [range (https://www.w3.org/TR/rdf12-schema/#ch\_range)](#range-httpswwww3orgtrrdf12-schemach_range)
|
||||
- [type (https://www.w3.org/TR/rdf12-schema/#ch\_type)](#type-httpswwww3orgtrrdf12-schemach_type)
|
||||
|
||||
|
||||
# receipts to transform ttl to spec
|
||||
|
||||
## *it* **a** *something*
|
||||
## **a**
|
||||
|
||||
*it* is **a** *something*
|
||||
|
||||
|
@ -28,6 +40,66 @@ Der token `a` in einer ttl Definition entspricht dem RDF-Prädikat `rdf:type`. S
|
|||
|
||||
Das bedeutet für das Tripel: `(R, rdf:type, C) => C instanceof rdfs:Class & R instanceof C`
|
||||
|
||||
|
||||
## **rdfs:range**
|
||||
|
||||
*its* value is defined in a **rdfs:range** *the range*
|
||||
|
||||
If range links to an other definition we map range same as **a**.
|
||||
|
||||
Example:
|
||||
```ttl
|
||||
as:id rdfs:range xsd:anyURI ;
|
||||
```
|
||||
|
||||
Maps to
|
||||
```clojure
|
||||
(s/def ::anyURI p/uri-string?)
|
||||
|
||||
(s/def ::id
|
||||
(s/and
|
||||
...
|
||||
::anyURI))
|
||||
```
|
||||
|
||||
## **rdfs:domain**
|
||||
|
||||
*it* belong to a **rdfs:domain** *owner*
|
||||
|
||||
### owner is **a** type
|
||||
|
||||
It is added to the owner. That's the way to model properties. If the owner is membe of an other namespace, we create a subclass with same name in the namespce in scope and enhance the subclass.
|
||||
|
||||
Example in namespace activitypub2
|
||||
```ttl
|
||||
as:id rdfs:domain [a owl:Class;]
|
||||
```
|
||||
|
||||
Maps to
|
||||
```clojure
|
||||
(s/def
|
||||
::Class
|
||||
(s/merge ::owl/Class
|
||||
(s/keys :opt-un [::id])))
|
||||
```
|
||||
|
||||
### owner is a **owl:unionOf** types
|
||||
|
||||
It is added to the owner. That's the way to model properties. If the owner is membe of an other namespace, we create a subclass with same name in the namespce in scope and enhance the subclass.
|
||||
|
||||
Example in namespace activitypub2
|
||||
```ttl
|
||||
as:id rdfs:domain [owl:unionOf (as:Link as:Object)]
|
||||
```
|
||||
|
||||
Maps to
|
||||
```clojure
|
||||
(s/def ::Object (s/keys :opt-un [::id ...]))
|
||||
|
||||
|
||||
(s/def ::Link (s/keys :opt-un [::id]))
|
||||
```
|
||||
|
||||
# Further infos
|
||||
|
||||
## RDF/S
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
[org.clojars.quoll/raphael "0.1.6"]
|
||||
[instaparse "1.4.12"]]
|
||||
:main ^:skip-aot org.domaindrivenarchitecture.activity-pub-poc.core
|
||||
:profiles {:test {:test-paths ["src/test/clj"]
|
||||
:profiles {:test {:test-paths ["src/test/cljc"
|
||||
"src/test/clj"]
|
||||
:resource-paths ["src/test/resources"]
|
||||
:dependencies [[dda/data-test "0.1.1"]]}})
|
||||
|
|
|
@ -1,12 +1,58 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2
|
||||
(:require [clojure.spec.alpha :as s]
|
||||
[orchestra.core :refer [defn-spec]]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.owl :as owl]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.rdf :as rdf]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.core :as core]))
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.xsd :as xsd]))
|
||||
|
||||
(defn-spec
|
||||
is-functional-property? boolean?
|
||||
"Checks whether spec is a FunctionalProperty."
|
||||
[spec keyword?]
|
||||
(some #(clojure.string/includes? % "FunctionalProperty") (s/describe spec)))
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#id
|
||||
;TODO: how do we translate this? rdfs:domain [a owl:Class ; owl:unionOf (as:Link as:Object)]
|
||||
(s/def ::id (s/and ::owl/FunctionalProperty
|
||||
::owl/DatatypeProperty
|
||||
(s/def
|
||||
::id (s/and ::owl/DatatypeProperty
|
||||
::owl/FunctionalProperty
|
||||
::owl/DeprecatedProperty
|
||||
core/uri-string?))
|
||||
::xsd/anyURI))
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#attachment
|
||||
(s/def ::attachment
|
||||
(s/and
|
||||
::owl/ObjectProperty
|
||||
::Class
|
||||
::Link
|
||||
::Object))
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#result
|
||||
(s/def ::result
|
||||
(s/and
|
||||
::owl/ObjectProperty
|
||||
::Class
|
||||
::Object
|
||||
::Link))
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#Activity
|
||||
;TODO: definition in progress
|
||||
(s/def ::Activity
|
||||
(s/and ::Object
|
||||
(s/keys :opt-un [::result])))
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#Object
|
||||
;TODO: definition in progress
|
||||
(s/def ::Object (s/keys :opt-un [::id ::attachment]))
|
||||
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#Link
|
||||
;TODO: definition in progress
|
||||
(s/def ::Link (s/keys :opt-un [::id]))
|
||||
|
||||
(s/def
|
||||
::Class
|
||||
(s/merge ::owl/Class
|
||||
(s/keys :opt-un [::id])))
|
||||
|
||||
|
||||
;http://www.w3.org/ns/activitystreams#Like
|
||||
(s/def ::Like ::Activity)
|
|
@ -1,12 +1,18 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.owl
|
||||
"A swallow spec translation implementation of owl. Inheritance of FunctionalProperty
|
||||
is realized in deep implemented."
|
||||
(:require [clojure.spec.alpha :as s]))
|
||||
(:require
|
||||
[clojure.spec.alpha :as s]
|
||||
[orchestra.core :refer [defn-spec]]))
|
||||
|
||||
; Properties:https://www.w3.org/TR/owl-ref/#Property
|
||||
; * Datatype properties link individuals to data values.
|
||||
; * Object properties link individuals to individuals.
|
||||
|
||||
;http://www.w3.org/2002/07/owl#Class
|
||||
;https://www.w3.org/TR/owl-ref/#Class-def
|
||||
(s/def ::Class any?)
|
||||
|
||||
;http://www.w3.org/2002/07/owl#DatatypeProperty
|
||||
(s/def ::DatatypeProperty any?)
|
||||
|
||||
|
@ -15,8 +21,22 @@
|
|||
|
||||
;http://www.w3.org/2002/07/owl#FunctionalProperty
|
||||
;https://www.w3.org/TR/owl-ref/#FunctionalProperty-def
|
||||
(s/def ::FunctionalProperty any?)
|
||||
(defn-spec
|
||||
functional? boolean?
|
||||
[elem any?]
|
||||
(and
|
||||
(some? elem)
|
||||
(or
|
||||
(not (coll? elem))
|
||||
(and (vector? elem) (= 1 (count elem)))
|
||||
(and (list? elem) (= 1 (count elem))))))
|
||||
(s/def ::FunctionalProperty functional?)
|
||||
|
||||
;http://www.w3.org/2002/07/owl#DeprecatedProperty
|
||||
;https://www.w3.org/TR/owl-ref/#Deprecation
|
||||
(s/def ::DeprecatedProperty any?)
|
||||
|
||||
|
||||
;http://www.w3.org/2002/07/owl#ObjectProperty
|
||||
;https://www.w3.org/TR/owl-ref/#ObjectProperty
|
||||
(s/def ::ObjectProperty any?)
|
|
@ -1,6 +1,5 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.xsd
|
||||
"A swallow spec translation implementation of xsd Inheritance of FunctionalProperty
|
||||
is realized in deep implemented."
|
||||
"A spec translation implementation of xsd. Predicates are implemented fully functional."
|
||||
(:require [clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.predicates :as p]))
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2-legacy-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is are testing run-tests]]
|
||||
[clojure.spec.test.alpha :as st]
|
||||
[clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2-legacy :as sut]))
|
||||
|
||||
;(deftest id-test
|
||||
; (is (s/valid? ::sut/id "https://social.bla/alyssa/status/RANDOMHASH")))
|
||||
|
||||
;(deftest type-test
|
||||
; (is (s/valid? ::sut/type "Note"))
|
||||
; (is (s/valid? ::sut/type "Link"))
|
||||
; (is (not(s/valid? ::sut/type "non existing"))))
|
||||
|
||||
;(deftest object-test
|
||||
; (is (s/valid? ::sut/Object "https://social.bla/alyssa/status/RANDOMHASH")
|
||||
; (is (s/valid? ::sut/Object {:id "https://social.bla/alyssa/status/RANDOMHASH" :type "Page"}))))
|
||||
;
|
||||
;(deftest link-test
|
||||
; (is (s/valid? ::sut/Link {:type "Link"})))
|
||||
|
||||
;(deftest Note-test
|
||||
; (is (s/valid?
|
||||
; ::sut/Note
|
||||
; {:id "https://social.bla/alyssa/status/RANDOMHASH"
|
||||
; :type "Note"
|
||||
; :content "text"})))
|
|
@ -1,28 +0,0 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is are testing run-tests]]
|
||||
[clojure.spec.test.alpha :as st]
|
||||
[clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 :as sut]))
|
||||
|
||||
(deftest id-test
|
||||
(is (s/valid? ::sut/id "https://social.bla/alyssa/status/RANDOMHASH")))
|
||||
|
||||
(deftest type-test
|
||||
(is (s/valid? ::sut/type "Note"))
|
||||
(is (s/valid? ::sut/type "Link"))
|
||||
(is (not(s/valid? ::sut/type "non existing"))))
|
||||
|
||||
(deftest object-test
|
||||
(is (s/valid? ::sut/Object "https://social.bla/alyssa/status/RANDOMHASH")
|
||||
(is (s/valid? ::sut/Object {:id "https://social.bla/alyssa/status/RANDOMHASH" :type "Page"}))))
|
||||
|
||||
(deftest link-test
|
||||
(is (s/valid? ::sut/Link {:type "Link"})))
|
||||
|
||||
;(deftest Note-test
|
||||
; (is (s/valid?
|
||||
; ::sut/Note
|
||||
; {:id "https://social.bla/alyssa/status/RANDOMHASH"
|
||||
; :type "Note"
|
||||
; :content "text"})))
|
|
@ -1,9 +0,0 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is are testing run-tests]]
|
||||
[clojure.spec.test.alpha :as st]
|
||||
[clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 :as sut]))
|
||||
|
||||
(deftest id-test
|
||||
(is true))
|
|
@ -0,0 +1,17 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is are testing run-tests]]
|
||||
[clojure.spec.test.alpha :as st]
|
||||
[clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 :as sut]))
|
||||
|
||||
(deftest shoult-test-spec-for-having-functional-property
|
||||
(is (sut/is-functional-property? ::sut/id))
|
||||
(is (not (sut/is-functional-property? ::sut/Like))))
|
||||
|
||||
(deftest id-test
|
||||
(is (s/valid? ::sut/id "https://social.bla/alyssa/status/RANDOMHASH"))
|
||||
(is (not (s/valid? ::sut/id nil)))
|
||||
(is (not (s/valid? ::sut/id 2)))
|
||||
(is (not (s/valid? ::sut/id "no-uri")))
|
||||
)
|
|
@ -0,0 +1,14 @@
|
|||
(ns org.domaindrivenarchitecture.activity-pub-poc.owl-test
|
||||
(:require
|
||||
[clojure.test :refer [deftest is are testing run-tests]]
|
||||
[clojure.spec.test.alpha :as st]
|
||||
[clojure.spec.alpha :as s]
|
||||
[org.domaindrivenarchitecture.activity-pub-poc.owl :as sut]))
|
||||
|
||||
(deftest functional-predicate
|
||||
(is (sut/functional? "str"))
|
||||
(is (sut/functional? 2))
|
||||
(is (sut/functional? ["str"]))
|
||||
(is (not (sut/functional? [])))
|
||||
(is (not (sut/functional? nil)))
|
||||
(is (not (sut/functional? [1 2]))))
|
|
@ -1 +1,11 @@
|
|||
{"@context":"https://www.w3.org/ns/activitystreams","id":"https://social.bla/alyssa#likes/RANDOMHASH","type":"Like","to":["https://chatty.bla/ben","https://chatty.bla/gen"],"actor":"https://social.bla/alyssa","object":"https://chatty.bla/ben/posts/234s23-2g34234-2hhj536"}
|
||||
{
|
||||
"@context": "https://www.w3.org/ns/activitystreams",
|
||||
"id": "https://social.bla/alyssa#likes/RANDOMHASH",
|
||||
"type": "Like",
|
||||
"to": [
|
||||
"https://chatty.bla/ben",
|
||||
"https://chatty.bla/gen"
|
||||
],
|
||||
"actor": "https://social.bla/alyssa",
|
||||
"object": "https://chatty.bla/ben/posts/234s23-2g34234-2hhj536"
|
||||
}
|
Loading…
Reference in a new issue