2014-01-15 84 views
0

對數據組屬性有2個查詢。 1.如果我知道屬性名稱(字符串),我該如何檢查該屬性是否已經定義或不在模式中? 2.基於我對datomic的實驗,我看到datomic使用冒號前綴處理屬性,並且沒有冒號前綴。即如果我們創建名爲「foo」和「:foo」的屬性,它們是一樣的。這是真的?這是一個限制嗎?帶冒號前綴的數據組屬性

我正在使用groovy.Below與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') 
    } 

 

如果我稱之爲「createAttribute」與「富」的屬性名稱和「attributeFor」方法「:富」作爲屬性名,我得到了一個結果。即「foo」和「:foo」的處理方式相同。 如何創建和查詢名稱包含冒號前綴的屬性?

回答

2

Datomic屬性名稱不是字符串,它們是edn keywords。前綴冒號是必需的(並且始終保存,無論您是否在代碼中指定它)。使用不支持名稱文字的語言(例如Java或Groovy)時冒號的可選性是爲了方便。