有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”被视为相同。 如何创建和查询名称包含冒号前缀的属性?
答案 0 :(得分:3)
Datomic属性名称不是字符串,它们是edn keywords。前缀冒号是必需的(并且始终存储,无论您是否在代码中指定它。)使用不支持名称文字的语言(例如Java或Groovy)时冒号的可选性是为了方便起见。