refactor: replace both :page and :object types with :node

This commit is contained in:
Tienson Qin
2024-07-30 17:18:39 +08:00
parent a7d45fdaec
commit 3bc1a673cb
13 changed files with 126 additions and 89 deletions

View File

@@ -100,8 +100,8 @@
{:block/title "number property block" :build/properties {:number 5}}
{:block/title "number-many property block" :build/properties {:number-many #{5 10}}}
{:block/title "number-closed property block" :build/properties {:number-closed (random-closed-value :number-closed)}}
{:block/title "object property block" :build/properties {:object [:block/uuid object-uuid]}}
{:block/title "object-many property block" :build/properties {:object-many #{[:block/uuid object-uuid] [:page "Page object"]}}}
{:block/title "object property block" :build/properties {:node [:block/uuid object-uuid]}}
{:block/title "object-many property block" :build/properties {:node-many #{[:block/uuid object-uuid] [:page "Page object"]}}}
{:block/title "page property block" :build/properties {:page [:page "Page 1"]}}
{:block/title "page-many property block" :build/properties {:page-many #{[:page "Page 1"] [:page "Page 2"]}}}
;; ;; :page-closed and :date-closed disabled for now since they're not supported
@@ -122,8 +122,8 @@
{:block/title "{{query (property :number 5)}}"}
{:block/title "{{query (property :number-many 10)}}"}
{:block/title (str "{{query (property :number-closed " (pr-str (get-closed-value :number-closed)) ")}}")}
{:block/title "{{query (property :object \"block object\")}}"}
{:block/title "{{query (property :object-many [[Page object]])}}"}
{:block/title "{{query (property :node \"block object\")}}"}
{:block/title "{{query (property :node-many [[Page object]])}}"}
{:block/title "{{query (property :page [[Page 1]])}}"}
{:block/title "{{query (property :page-many [[Page 2]])}}"}
#_{:block/title (str "{{query (property :page-closed " (page-ref/->page-ref (string/capitalize (get-closed-value :page-closed))) ")}}")}
@@ -142,8 +142,8 @@
{:page {:block/title "number page" :build/properties {:number 5}}}
{:page {:block/title "number-many page" :build/properties {:number-many #{5 10}}}}
{:page {:block/title "number-closed page" :build/properties {:number-closed (random-closed-value :number-closed)}}}
{:page {:block/title "object page" :build/properties {:object [:block/uuid object-uuid]}}}
{:page {:block/title "object-many page" :build/properties {:object-many #{[:block/uuid object-uuid] [:page "Page object"]}}}}
{:page {:block/title "object page" :build/properties {:node [:block/uuid object-uuid]}}}
{:page {:block/title "object-many page" :build/properties {:node-many #{[:block/uuid object-uuid] [:page "Page object"]}}}}
{:page {:block/title "page page" :build/properties {:page [:page "Page 1"]}}}
{:page {:block/title "page-many page" :build/properties {:page-many #{[:page "Page 1"] [:page "Page 2"]}}}}
;; #_{:page {:block/title "page-closed page" :build/properties {:page-closed (random-closed-value :page-closed)}}}
@@ -163,8 +163,8 @@
{:block/title "{{query (page-property :number 5)}}"}
{:block/title "{{query (page-property :number-many 10)}}"}
{:block/title (str "{{query (page-property :number-closed " (pr-str (get-closed-value :number-closed)) ")}}")}
{:block/title "{{query (page-property :object \"block object\")}}"}
{:block/title "{{query (page-property :object-many [[Page object]])}}"}
{:block/title "{{query (page-property :node \"block object\")}}"}
{:block/title "{{query (page-property :node-many [[Page object]])}}"}
{:block/title "{{query (page-property :page [[Page 1]])}}"}
{:block/title "{{query (page-property :page-many [[Page 2]])}}"}
#_{:block/title (str "{{query (page-property :page-closed " (page-ref/->page-ref (string/capitalize (get-closed-value :page-closed))) ")}}")}
@@ -176,14 +176,14 @@
;; Properties
:properties
(->> [:default :url :checkbox :number :page :date :object]
(->> [:default :url :checkbox :number :page :date :node]
(mapcat #(cond-> [[% (cond-> {:block/schema {:type %}}
(= :object %)
(= :node %)
(assoc :build/schema-classes [:TestClass]))]]
(db-property-type/property-type-allows-schema-attribute? % :cardinality)
(conj [(keyword (str (name %) "-many"))
(cond-> {:block/schema {:type % :cardinality :many}}
(= :object %)
(= :node %)
(assoc :build/schema-classes [:TestClass]))])))
(into (mapv #(vector (keyword (str (name %) "-closed"))
{:block/schema {:type %}

View File

@@ -6,10 +6,10 @@
* Some classes are renamed due to naming conflicts
* All properties with their property type, url, description
* Property type is determined by looking for the first range value that is
a subclass of https://schema.org/DataType and then falling back to :page.
a subclass of https://schema.org/DataType and then falling back to :node.
* Some properties are skipped because they are superseded/deprecated or because they have a property
type logseq doesnt' support yet
* schema.org assumes no cardinality. For now, only :page properties are given a :cardinality :many"
* schema.org assumes no cardinality. For now, only :node properties are given a :cardinality :many"
(:require [logseq.outliner.cli :as outliner-cli]
[logseq.common.util :as common-util]
[logseq.db.frontend.property :as db-property]
@@ -95,7 +95,7 @@
(defn- get-schema-type [range-includes class-map]
(some #(or (schema->logseq-data-types %)
(when (class-map %) :page))
(when (class-map %) :node))
range-includes))
(defn- ->property-page [property-m class-map {:keys [verbose renamed-pages renamed-properties]}]
@@ -106,25 +106,25 @@
(println "Picked property type:"
{:property (property-m "@id") :type schema-type :range-includes (vec range-includes)}))
_ (assert schema-type (str "No schema found for property " (property-m "@id")))
_ (when (= schema-type :page)
_ (when (= schema-type :node)
(when-let [datatype-classes (not-empty (set/intersection (set range-includes)
(set (keys schema->logseq-data-types))))]
(throw (ex-info (str "property " (pr-str (property-m "@id"))
" with type :page has DataType class values which aren't supported: " datatype-classes) {}))))
" with type :node has DataType class values which aren't supported: " datatype-classes) {}))))
inverted-renamed-properties (set/map-invert renamed-properties)
class-name (strip-schema-prefix (property-m "@id"))
url (str "https://schema.org/" (get inverted-renamed-properties class-name class-name))
schema (cond-> {:type schema-type}
;; This cardinality rule should be adjusted as we use schema.org more
(= schema-type :page)
(= schema-type :node)
(assoc :cardinality :many)
(property-m "rdfs:comment")
(assoc :description (get-comment-string (property-m "rdfs:comment") renamed-pages)))]
{(keyword (strip-schema-prefix (property-m "@id")))
(cond-> {:block/schema schema
:build/properties {:url url}}
(= schema-type :page)
(= schema-type :node)
(assoc :build/schema-classes (mapv (comp keyword strip-schema-prefix) range-includes)))}))
(defn- get-class-to-properties
@@ -269,7 +269,7 @@
all-properties* (get-all-properties schema-data options)
property-tuples (map #(vector (% "@id") :property) all-properties*)
class-tuples (map #(vector (% "@id") :class) all-classes*)
page-tuples (map #(vector (str "schema:" %) :page) existing-pages)
page-tuples (map #(vector (str "schema:" %) :node) existing-pages)
renamed-classes (detect-id-conflicts-and-get-renamed-classes
property-tuples class-tuples page-tuples options)
renamed-properties (detect-property-conflicts-and-get-renamed-properties