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
|
# receipts to transform ttl to spec
|
||||||
|
|
||||||
## *it* **a** *something*
|
## **a**
|
||||||
|
|
||||||
*it* is **a** *something*
|
*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`
|
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
|
# Further infos
|
||||||
|
|
||||||
## RDF/S
|
## RDF/S
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
[org.clojars.quoll/raphael "0.1.6"]
|
[org.clojars.quoll/raphael "0.1.6"]
|
||||||
[instaparse "1.4.12"]]
|
[instaparse "1.4.12"]]
|
||||||
:main ^:skip-aot org.domaindrivenarchitecture.activity-pub-poc.core
|
: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"]
|
:resource-paths ["src/test/resources"]
|
||||||
:dependencies [[dda/data-test "0.1.1"]]}})
|
:dependencies [[dda/data-test "0.1.1"]]}})
|
||||||
|
|
|
@ -1,12 +1,58 @@
|
||||||
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2
|
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2
|
||||||
(:require [clojure.spec.alpha :as s]
|
(:require [clojure.spec.alpha :as s]
|
||||||
|
[orchestra.core :refer [defn-spec]]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.owl :as owl]
|
[org.domaindrivenarchitecture.activity-pub-poc.owl :as owl]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.rdf :as rdf]
|
[org.domaindrivenarchitecture.activity-pub-poc.xsd :as xsd]))
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.core :as core]))
|
|
||||||
|
(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
|
;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
|
||||||
(s/def ::id (s/and ::owl/FunctionalProperty
|
::id (s/and ::owl/DatatypeProperty
|
||||||
::owl/DatatypeProperty
|
::owl/FunctionalProperty
|
||||||
::owl/DeprecatedProperty
|
::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
|
(ns org.domaindrivenarchitecture.activity-pub-poc.owl
|
||||||
"A swallow spec translation implementation of owl. Inheritance of FunctionalProperty
|
"A swallow spec translation implementation of owl. Inheritance of FunctionalProperty
|
||||||
is realized in deep implemented."
|
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
|
; Properties:https://www.w3.org/TR/owl-ref/#Property
|
||||||
; * Datatype properties link individuals to data values.
|
; * Datatype properties link individuals to data values.
|
||||||
; * Object properties link individuals to individuals.
|
; * 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
|
;http://www.w3.org/2002/07/owl#DatatypeProperty
|
||||||
(s/def ::DatatypeProperty any?)
|
(s/def ::DatatypeProperty any?)
|
||||||
|
|
||||||
|
@ -15,8 +21,22 @@
|
||||||
|
|
||||||
;http://www.w3.org/2002/07/owl#FunctionalProperty
|
;http://www.w3.org/2002/07/owl#FunctionalProperty
|
||||||
;https://www.w3.org/TR/owl-ref/#FunctionalProperty-def
|
;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
|
;http://www.w3.org/2002/07/owl#DeprecatedProperty
|
||||||
;https://www.w3.org/TR/owl-ref/#Deprecation
|
;https://www.w3.org/TR/owl-ref/#Deprecation
|
||||||
(s/def ::DeprecatedProperty any?)
|
(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
|
(ns org.domaindrivenarchitecture.activity-pub-poc.xsd
|
||||||
"A swallow spec translation implementation of xsd Inheritance of FunctionalProperty
|
"A spec translation implementation of xsd. Predicates are implemented fully functional."
|
||||||
is realized in deep implemented."
|
|
||||||
(:require [clojure.spec.alpha :as s]
|
(:require [clojure.spec.alpha :as s]
|
||||||
[org.domaindrivenarchitecture.activity-pub-poc.predicates :as p]))
|
[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