您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Hyperledger composer建模語(yǔ)言怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
Hyperledger Composer包含一種面向?qū)ο蟮慕UZ(yǔ)言,用于定義業(yè)務(wù)網(wǎng)絡(luò)定義的領(lǐng)域模型
Hyperledger Composer CTO文件由以下元素組成:
1.單個(gè)命名空間。文件中的所有資源聲明都隱含在這個(gè)名稱空間中。
2.一組資源定義,包含資產(chǎn),交易,參與者和事件,枚舉類型和Concepts。
3.從其他名稱空間導(dǎo)入資源的可選導(dǎo)入聲明。
2.1 組織名稱空間是在您的model(.cto
)文件的名稱空間行中定義的,并且創(chuàng)建的所有資源隱含地都是該名稱空間的一部分。
2.2 除了定義資產(chǎn),參與者,事件和事務(wù)的新類別外,還有一個(gè)系統(tǒng)命名空間,其中包含資產(chǎn),事件,參與者和事務(wù)的基本定義。這些基本定義是由所有資產(chǎn),事件,參與者和事務(wù)隱式擴(kuò)展的抽象類型,在系統(tǒng)名稱空間定義中,資產(chǎn)和參與者沒(méi)有必需的值。事件和事務(wù)由eventId或transactionId和時(shí)間戳定義。系統(tǒng)名稱空間還包括注冊(cè)表的定義,歷史記錄記錄,身份和一些系統(tǒng)事務(wù)。
2.3 如果定義了包括eventId,transactionId或時(shí)間戳的事件或事務(wù),則必須刪除eventId,transactionId或timestamp屬性。
Hyperledger Composer中的資源包括:資產(chǎn),參與者,交易和事件,枚舉類型,資產(chǎn),參與者和交易是類定義。資產(chǎn),參與者和交易的概念可以被認(rèn)為是類別類型的不同刻板印象。Hyperledger Composer中的類稱為資源定義,因此資產(chǎn)實(shí)例具有資產(chǎn)定義。
3.2.1 由其父文件的名稱空間定義的名稱空間。.cto
文件的名稱空間隱式應(yīng)用于其中創(chuàng)建的所有資源。
3.2.2 例如Vehicle
,名稱和標(biāo)識(shí)字段,例如vin
。如果資源是資產(chǎn)或參與者,則名稱后跟識(shí)別字段,如果資源是事件或交易,則自動(dòng)設(shè)置標(biāo)識(shí)字段。在這個(gè)例子中,資產(chǎn)被命名Vehicle
并且識(shí)別字段是vin
。
/** * A vehicle asset. */ asset Vehicle identified by vin { o String vin }
3.2.3 資源定義擴(kuò)展的可選超類型。該資源將采用超類型所需的所有屬性和字段,并從其自己的定義中添加任何其他屬性或字段。
/** * A car asset. A car is related to a list of parts */ asset Car extends Vehicle { o String model --> Part[] Parts }
3.2.4 一個(gè)可選的“抽象”聲明,用于指示無(wú)法創(chuàng)建此類型。抽象資源可以用作其他類的擴(kuò)展基礎(chǔ)。抽象類的擴(kuò)展不會(huì)繼承抽象狀態(tài)。例如,Vehicle
上面定義的資產(chǎn)不應(yīng)該創(chuàng)建,因?yàn)閼?yīng)定義更多特定的資產(chǎn)類來(lái)擴(kuò)展它。
/** * An abstract Vehicle asset. */ abstract asset Vehicle identified by vin { o String vin }
3.2.5 一組命名的屬性。這些屬性必須命名,并且定義了原始數(shù)據(jù)類型。屬性及其數(shù)據(jù)由每個(gè)資源擁有,例如,Car
資產(chǎn)具有vin
一個(gè)model
屬性和一個(gè)屬性,它們都是字符串。
3.2.6 與其他Composer類型的一組關(guān)系,這些類型不屬于資源,但可以從資源引用。關(guān)系是單向的。
/** * A Field asset. A Field is related to a list of animals */ asset Field identified by fieldId { o String fieldId o String name --> Animal[] animals }
枚舉類型用于指定可能具有1或N個(gè)可能值的類型。下面的示例定義了ProductType枚舉,它可能具有值DAIRY
或BEEF
或VEGETABLES
。
/** * An enumerated type */ enum ProductType { o DAIRY o BEEF o VEGETABLES }
當(dāng)創(chuàng)建另一個(gè)資源時(shí),例如參與者,可以根據(jù)枚舉類型定義該資源的屬性
participant Farmer identified by farmerId { o String farmerId o ProductType primaryProduct }
例如,下面Address
定義一個(gè)抽象概念,然后專門(mén)化成一個(gè)UnitedStatesAddress
。請(qǐng)注意,概念沒(méi)有identified by
字段,因?yàn)樗鼈儾荒苤苯哟鎯?chǔ)在注冊(cè)表中或在關(guān)系中引用。
abstract concept Address { o String street o String city default ="Winchester" o String country default = "UK" o Integer[] counts optional } concept UnitedStatesAddress extends Address { o String zipcode }
例如,可以使用這個(gè)概念
participant Farmer identified by farmerId { o String farmerId o UnitedStatesAddress address o ProductType primaryProduct }
4.1 字符串:一個(gè)UTF8編碼的字符串。
4.2 Double:雙精度64位數(shù)值
4.3 整數(shù):一個(gè)32位有符號(hào)整數(shù)
4.4 長(zhǎng):64位有符號(hào)整數(shù)
4.5 DateTime:兼容ISO-8601的時(shí)間實(shí)例,具有可選的時(shí)區(qū)和UTZ偏移量
4.6 布爾值:一個(gè)布爾值,無(wú)論是true還是false。
Composer中的所有類型都可以使用[]符號(hào)聲明為數(shù)組
Integer[] integerArray
整數(shù)數(shù)組存儲(chǔ)在名為'integerArray'的字段中。而是與動(dòng)物類型的關(guān)系數(shù)組,存儲(chǔ)在名為“傳入”的字段中。是與動(dòng)物類型的關(guān)系數(shù)組,存儲(chǔ)在名為“傳入”的字段中。
--> Animal[] incoming
Composer語(yǔ)言中的關(guān)系是由以下組成的元組:
被引用類型的名稱空間
被引用類型的類型名稱
被引用實(shí)例的標(biāo)識(shí)符
因此,關(guān)系可以是:org.example.Vehicle#123456
這與org.example命名空間中標(biāo)識(shí)為123456的Vehicle類型有關(guān)系。
關(guān)系是單向的,刪除不會(huì)級(jí)聯(lián),即。消除這種關(guān)系對(duì)所指向的事物沒(méi)有影響。刪除被指向的東西不會(huì)使關(guān)系失效。
必須解決關(guān)系才能檢索被引用對(duì)象的實(shí)例。如果對(duì)象不再存在或關(guān)系中的信息無(wú)效,則解析行為可能會(huì)導(dǎo)致為空。
字符串字段可能包含一個(gè)可選的正則表達(dá)式,用于驗(yàn)證字段的內(nèi)容。仔細(xì)使用字段驗(yàn)證器可以使Composer執(zhí)行豐富的數(shù)據(jù)驗(yàn)證,從而減少錯(cuò)誤并降低樣板代碼。
下面的例子聲明Farmer
參與者包含一個(gè)postcode
必須符合英國(guó)郵政有效郵政編碼正則表達(dá)式的字段。
participant Farmer extends Participant { o String firstName default="Old" o String lastName default="McDonald" o String address1 o String address2 o String county o String postcode regex=/(GIR 0AA)|((([A-Z-[QVf]][0-9][0-9]?)|(([A-Z-[QVf]][A-Z-[IJZ]][0-9][0-9]?)|(([A-Z-[QVf]][0-9][A-HJKPSTUW])|([A-Z-[QVf]][A-Z-[IJZ]][0-9][ABEHMNPRVWfY])))) [0-9][A-Z-[CIKMOV]]{2})/ }
Double,Long或Integer字段可以包含一個(gè)可選的范圍表達(dá)式,用于驗(yàn)證字段的內(nèi)容。
下面的示例聲明該Vehicle
資產(chǎn)具有一個(gè)Integer字段year
,該字段默認(rèn)為2016并且必須是1990或更高。如果不需要檢查,則范圍表達(dá)式可以省略下限或上限。
asset Vehicle extends Base { // An asset contains Fields, each of which can have an optional default value o String model default="F150" o String make default="FORD" o String reg default="ABC123" // A numeric field can have a range validation expression o Integer year default=2016 range=[1990,] optional // model year must be 1990 or higher o Integer[] integerArray o State state o Double value o String colour o String V5cID regex=/^[A-z][A-z][0-9]{7}/ o String LeaseContractID o Boolean scrapped default=false o DateTime lastUpdate optional --> Participant owner //relationship to a Participant, with the field named 'owner'. --> Participant[] previousOwners optional // Nary relationship o Customer customer }
將該import
關(guān)鍵字與完全限定的類型名稱一起使用,從另一個(gè)名稱空間導(dǎo)入一個(gè)類型?;蛘撸褂?code>.*符號(hào)從其他名稱空間導(dǎo)入所有類型。
import org.example.MyAsset import org.example2.
資源的資源和屬性可能會(huì)附加裝飾器。裝飾器用于使用元數(shù)據(jù)注釋模型。下面的示例將foo
裝飾器添加到買方參與者,“arg1”和2作為參數(shù)傳遞給裝飾器。
同樣,裝飾器可以附加到屬性,關(guān)系和枚舉值。
@foo("arg1", 2) participant Buyer extends Person { }
資源定義和屬性可以用0或更多裝飾來(lái)裝飾。請(qǐng)注意,每個(gè)元素類型只允許一個(gè)裝飾器的單個(gè)實(shí)例。也就是說(shuō),@bar
裝飾者在同一個(gè)元素上列出兩次是無(wú)效的。
裝飾者可以有任意的參數(shù)列表(0或更多項(xiàng))。參數(shù)值必須是字符串,數(shù)字或布爾值。
裝飾器可以通過(guò)ModelManager introspect API在運(yùn)行時(shí)訪問(wèn)。這允許外部工具和實(shí)用程序使用Composer建模語(yǔ)言(Composer Modeling Language,CTO)文件格式來(lái)描述核心模型,并使用足夠的元數(shù)據(jù)為自己的目的進(jìn)行裝飾。
下面的例子檢索附加到類聲明的myField屬性的foo裝飾器的第三個(gè)參數(shù):
const val = myField.getDecorator('foo').getArguments()[2];
感謝各位的閱讀!關(guān)于“Hyperledger composer建模語(yǔ)言怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。