Datomic 不是属性的有效 :uri
Datomic not a valid :uri for attribute
我正在尝试在定义为
的属性上插入一个值
{:db/ident :foo/uri
:db/valueType :db.type/uri
:db/cardinality :db.cardinality/one
:db/doc "Test attribute of value type uri."}
我正在插入
{:foo/uri "scheme://host/path"}
并得到
Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).
Value scheme://host/path is not a valid :uri for attribute :foo/uri
我不知道要在此处插入什么。它应该是一个字符串,对吧?没有 reader 文字?
我在网上找到了零个这样的例子。还看了下这个对应的java class但是没有光照。或者它可能需要一个 java.net.URI
的实例,所以要将它放在 edn
中,我们需要安装我们自己的 reader 文字?
它确实需要是 java.net.URI
的一个实例。
如果它是您代码的一部分,您可以在创建它时将其包装起来:
{:foo/uri (new java.net.URI "scheme://host/path")}
如果你想从 edn 文件中读取它,那么你可以在文件中使用自定义标签,比如 #URI
,并将自定义 reader 函数作为选项传递给 edn/read-string
:
;;; in some file located at `path`
{:foo/uri #URI"scheme://host/path"}
;;; code to read the file at `path`
(require '[clojure.edn :as edn])
(-> path
slurp
(edn/read-string {:readers {'URI #(new java.net.URI %)}})
您也可以使用 clojure.tools.reader
执行此操作,它允许不安全的代码执行(因此可能不推荐):
;;; use reader tools
(require '[clojure.tools.reader :as r])
(r/read-string "{:foo/uri #=(new java.net.URI \"scheme://host/path\")}")
我正在尝试在定义为
的属性上插入一个值{:db/ident :foo/uri
:db/valueType :db.type/uri
:db/cardinality :db.cardinality/one
:db/doc "Test attribute of value type uri."}
我正在插入
{:foo/uri "scheme://host/path"}
并得到
Execution error (ExceptionInfo) at datomic.client.api.async/ares (async.clj:58).
Value scheme://host/path is not a valid :uri for attribute :foo/uri
我不知道要在此处插入什么。它应该是一个字符串,对吧?没有 reader 文字?
我在网上找到了零个这样的例子。还看了下这个对应的java class但是没有光照。或者它可能需要一个 java.net.URI
的实例,所以要将它放在 edn
中,我们需要安装我们自己的 reader 文字?
它确实需要是 java.net.URI
的一个实例。
如果它是您代码的一部分,您可以在创建它时将其包装起来:
{:foo/uri (new java.net.URI "scheme://host/path")}
如果你想从 edn 文件中读取它,那么你可以在文件中使用自定义标签,比如 #URI
,并将自定义 reader 函数作为选项传递给 edn/read-string
:
;;; in some file located at `path`
{:foo/uri #URI"scheme://host/path"}
;;; code to read the file at `path`
(require '[clojure.edn :as edn])
(-> path
slurp
(edn/read-string {:readers {'URI #(new java.net.URI %)}})
您也可以使用 clojure.tools.reader
执行此操作,它允许不安全的代码执行(因此可能不推荐):
;;; use reader tools
(require '[clojure.tools.reader :as r])
(r/read-string "{:foo/uri #=(new java.net.URI \"scheme://host/path\")}")