This commit is contained in:
Mirco 2023-07-25 07:40:37 +02:00
commit d50a2cf5dc
11 changed files with 221 additions and 51 deletions

View file

@ -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

View file

@ -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"]]}})

View file

@ -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)

View file

@ -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?)

View file

@ -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]))

View file

@ -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"})))

View file

@ -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"})))

View file

@ -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))

View file

@ -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")))
)

View file

@ -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]))))

View file

@ -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"
}