0

データ属性に関する 2 つのクエリがあります。1. 属性名 (文字列) がわかっている場合、その属性がスキーマに既に定義されているかどうかを確認するにはどうすればよいですか? 2. datomic での実験に基づいて、datomic はコロン プレフィックスを含む属性とコロン プレフィックスを含まない属性を同じように扱うことがわかります。つまり、"foo" と ":foo" という名前の属性を作成すると、それらはまったく同じものになります。これは本当ですか?これは制限ですか?

私はgroovyでdatomicを使用しています。以下は、属性を作成するために使用されるコードです。名前とともに、他のパラメーターが入力されます。



    static def createAttribute(String name, String type, String description, Connection connection) {
     List schema = [[
                    ':db/id': Peer.tempid(':db.part/db'),
                    ':db/ident' : name,
                    ':db/valueType': type,
                    ':db/cardinality': ':db.cardinality/one',
                    ':db/doc': description,
                    ':db.install/_attribute': ':db.part/db'
            ]]
            connection.transact(schema).get()


そして、属性の存在を確認するために使用するクエリは



    def attributeFor(String attributeName, Database db) {
     db.entity(attributeName).get(':db.install/_attribute')
    }


属性名に「foo」、属性名に「attributeFor」メソッド「:foo」を指定して「createAttribute」を呼び出すと、結果が得られます。つまり、"foo" と ":foo" は同じように扱われます。コロンのプレフィックスを含む名前の属性を作成してクエリするにはどうすればよいですか?

4

1 に答える 1

3

Datomic 属性名は文字列ではなく、edn キーワードです。プレフィックス コロンは必須です (コードで指定するかどうかに関係なく、常に格納されます)。名前リテラルをサポートしない言語 (Java や Groovy など) で作業する場合のコロンのオプションは、利便性を意図したものです。

于 2014-01-25T13:48:50.840 に答える