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
## *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

View file

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

View file

@ -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
::owl/DeprecatedProperty
core/uri-string?))
(s/def
::id (s/and ::owl/DatatypeProperty
::owl/FunctionalProperty
::owl/DeprecatedProperty
::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
"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?)

View file

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

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