溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hyperledger composer建模語(yǔ)言怎么用

發(fā)布時(shí)間:2021-12-06 14:56:20 來(lái)源:億速云 閱讀:168 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家分享的是有關(guān)Hyperledger composer建模語(yǔ)言怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

1、概念介紹

    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、組織和Hyperledger Composer系統(tǒng)命名空間

    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屬性。

3、資源聲明

    3.1 介紹

    Hyperledger Composer中的資源包括:資產(chǎn),參與者,交易和事件,枚舉類型,資產(chǎn),參與者和交易是類定義。資產(chǎn),參與者和交易的概念可以被認(rèn)為是類別類型的不同刻板印象。Hyperledger Composer中的類稱為資源定義,因此資產(chǎn)實(shí)例具有資產(chǎn)定義。

    3.2 資源定義具有以下屬性:

        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
}
    3.3 枚舉類型的聲明 

    枚舉類型用于指定可能具有1或N個(gè)可能值的類型。下面的示例定義了ProductType枚舉,它可能具有值DAIRYBEEFVEGETABLES。    

/**
 * 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
}
    3.4 概念是不屬于資產(chǎn),參與者或交易的抽象類。它們通常由資產(chǎn),參與者或交易包含。

    例如,下面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、原始類型

    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。

5、數(shù)組

    Composer中的所有類型都可以使用[]符號(hào)聲明為數(shù)組

Integer[] integerArray

    整數(shù)數(shù)組存儲(chǔ)在名為'integerArray'的字段中。而是與動(dòng)物類型的關(guān)系數(shù)組,存儲(chǔ)在名為“傳入”的字段中。是與動(dòng)物類型的關(guān)系數(shù)組,存儲(chǔ)在名為“傳入”的字段中。

--> Animal[] incoming

6、關(guān)系

Composer語(yǔ)言中的關(guān)系是由以下組成的元組:

  1. 被引用類型的名稱空間

  2. 被引用類型的類型名稱

  3. 被引用實(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)致為空。

7、字段驗(yàn)證程序

    字符串字段可能包含一個(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
}

8、導(dǎo)入

    將該import關(guān)鍵字與完全限定的類型名稱一起使用,從另一個(gè)名稱空間導(dǎo)入一個(gè)類型?;蛘撸褂?code>.*符號(hào)從其他名稱空間導(dǎo)入所有類型。

import org.example.MyAsset
import org.example2.

9、裝飾

    9.1 裝飾

    資源的資源和屬性可能會(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ú)效的。

    9.2 裝飾者參數(shù)

    裝飾者可以有任意的參數(shù)列表(0或更多項(xiàng))。參數(shù)值必須是字符串,數(shù)字或布爾值。

    9.3 裝飾者API

    裝飾器可以通過(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ò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI