带有冒号前缀的datomic属性

时间:2014-01-15 13:56:40

标签: datomic

有2个关于数据组属性的查询。 1.如果我知道属性名称(String),如何检查模式中是否已定义属性? 2.根据我对datomic的实验,我看到datomic处理带有冒号前缀且没有冒号前缀相同的属性。即如果我们创建名为“foo”和“:foo”的属性,它们就是同一个。这是真的?这是一个限制吗?

我在groovy中使用datomic.Below是用于创建属性的代码。除名称外,还输入其他参数。



    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')
    }


如果我将“createAttribute”称为“foo”作为属性名称,将“attributeFor”方法称为“:foo”作为属性名称,我得到一个结果。即“foo”和“:foo”被视为相同。 如何创建和查询名称包含冒号前缀的属性?

1 个答案:

答案 0 :(得分:3)

Datomic属性名称不是字符串,它们是edn keywords。前缀冒号是必需的(并且始终存储,无论您是否在代码中指定它。)使用不支持名称文字的语言(例如Java或Groovy)时冒号的可选性是为了方便起见。