为什么80%的码农都做不了架构师?>>>   

QQ群:693675108 (技术群,非区块链研究者勿扰)

1、概念介绍

Hyperledger Composer包含一种面向对象的建模语言,用于定义业务网络定义的领域模型

Hyperledger Composer CTO文件由以下元素组成:

1.单个命名空间。文件中的所有资源声明都隐含在这个名称空间中。

2.一组资源定义,包含资产,交易,参与者和事件,枚举类型和Concepts。

3.从其他名称空间导入资源的可选导入声明。

2、组织和Hyperledger Composer系统命名空间

2.1 组织名称空间是在您的model(.cto)文件的名称空间行中定义的,并且创建的所有资源隐含地都是该名称空间的一部分。

2.2 除了定义资产,参与者,事件和事务的新类别外,还有一个系统命名空间,其中包含资产,事件,参与者和事务的基本定义。这些基本定义是由所有资产,事件,参与者和事务隐式扩展的抽象类型,在系统名称空间定义中,资产和参与者没有必需的值。事件和事务由eventId或transactionId和时间戳定义。系统名称空间还包括注册表的定义,历史记录记录,身份和一些系统事务。

2.3 如果定义了包括eventId,transactionId或时间戳的事件或事务,则必须删除eventId,transactionId或timestamp属性。

3、资源声明

3.1 介绍

Hyperledger Composer中的资源包括:资产,参与者,交易和事件,枚举类型,资产,参与者和交易是类定义。资产,参与者和交易的概念可以被认为是类别类型的不同刻板印象。Hyperledger Composer中的类称为资源定义,因此资产实例具有资产定义。

3.2 资源定义具有以下属性:

3.2.1 由其父文件的名称空间定义的名称空间。.cto文件的名称空间隐式应用于其中创建的所有资源。

3.2.2 例如Vehicle,名称和标识字段,例如vin。如果资源是资产或参与者,则名称后跟识别字段,如果资源是事件或交易,则自动设置标识字段。在这个例子中,资产被命名Vehicle并且识别字段是vin

/*** A vehicle asset.*/
asset Vehicle identified by vin {o String vin
}

3.2.3 资源定义扩展的可选超类型。该资源将采用超类型所需的所有属性和字段,并从其自己的定义中添加任何其他属性或字段。

/*** A car asset. A car is related to a list of parts*/
asset Car extends Vehicle {o String model--> Part[] Parts
}

3.2.4 一个可选的“抽象”声明,用于指示无法创建此类型。抽象资源可以用作其他类的扩展基础。抽象类的扩展不会继承抽象状态。例如,Vehicle上面定义的资产不应该创建,因为应定义更多特定的资产类来扩展它。

/*** An abstract Vehicle asset.*/
abstract asset Vehicle identified by vin {o String vin
}

3.2.5 一组命名的属性。这些属性必须命名,并且定义了原始数据类型。属性及其数据由每个资源拥有,例如,Car资产具有vin一个model属性和一个属性,它们都是字符串。

3.2.6 与其他Composer类型的一组关系,这些类型不属于资源,但可以从资源引用。关系是单向的。

/*** A Field asset. A Field is related to a list of animals*/
asset Field identified by fieldId {o String fieldIdo String name--> Animal[] animals
}

3.3 枚举类型的声明

枚举类型用于指定可能具有1或N个可能值的类型。下面的示例定义了ProductType枚举,它可能具有值DAIRYBEEFVEGETABLES

/*** An enumerated type*/
enum ProductType {o DAIRYo BEEFo VEGETABLES
}

当创建另一个资源时,例如参与者,可以根据枚举类型定义该资源的属性

participant Farmer identified by farmerId {o String farmerIdo ProductType primaryProduct
}

3.4 概念是不属于资产,参与者或交易的抽象类。它们通常由资产,参与者或交易包含。

例如,下面Address定义一个抽象概念,然后专门化成一个UnitedStatesAddress。请注意,概念没有identified by字段,因为它们不能直接存储在注册表中或在关系中引用。

abstract concept Address {o String streeto String city default ="Winchester"o String country default = "UK"o Integer[] counts optional
}concept UnitedStatesAddress extends Address {o String zipcode
}

例如,可以使用这个概念

participant Farmer identified by farmerId {o String farmerIdo UnitedStatesAddress addresso ProductType primaryProduct
}

4、原始类型

4.1 字符串:一个UTF8编码的字符串。

4.2 Double:双精度64位数值

4.3 整数:一个32位有符号整数

4.4 长:64位有符号整数

4.5 DateTime:兼容ISO-8601的时间实例,具有可选的时区和UTZ偏移量

4.6 布尔值:一个布尔值,无论是true还是false。

5、数组

Composer中的所有类型都可以使用[]符号声明为数组

Integer[] integerArray

整数数组存储在名为'integerArray'的字段中。而是与动物类型的关系数组,存储在名为“传入”的字段中。是与动物类型的关系数组,存储在名为“传入”的字段中。

--> Animal[] incoming

6、关系

Composer语言中的关系是由以下组成的元组:

  1. 被引用类型的名称空间
  2. 被引用类型的类型名称
  3. 被引用实例的标识符

因此,关系可以是:org.example.Vehicle#123456

这与org.example命名空间中标识为123456的Vehicle类型有关系。

关系是单向的,删除不会级联,即。消除这种关系对所指向的事物没有影响。删除被指向的东西不会使关系失效。

必须解决关系才能检索被引用对象的实例。如果对象不再存在或关系中的信息无效,则解析行为可能会导致为空。

7、字段验证程序

字符串字段可能包含一个可选的正则表达式,用于验证字段的内容。仔细使用字段验证器可以使Composer执行丰富的数据验证,从而减少错误并降低样板代码。

下面的例子声明Farmer参与者包含一个postcode必须符合英国邮政有效邮政编码正则表达式的字段。

participant Farmer extends Participant {o String firstName default="Old"o String lastName default="McDonald"o String address1o String address2o String countyo 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字段可以包含一个可选的范围表达式,用于验证字段的内容。

下面的示例声明该Vehicle资产具有一个Integer字段year,该字段默认为2016并且必须是1990或更高。如果不需要检查,则范围表达式可以省略下限或上限。

asset Vehicle extends Base {// An asset contains Fields, each of which can have an optional default valueo String model default="F150"o String make default="FORD"o String reg default="ABC123"// A numeric field can have a range validation expressiono Integer year default=2016 range=[1990,] optional // model year must be 1990 or highero Integer[] integerArrayo State stateo Double valueo String colouro String V5cID regex=/^[A-z][A-z][0-9]{7}/o String LeaseContractIDo Boolean scrapped default=falseo DateTime lastUpdate optional--> Participant owner //relationship to a Participant, with the field named 'owner'.--> Participant[] previousOwners optional // Nary relationshipo Customer customer
}

8、导入

将该import关键字与完全限定的类型名称一起使用,从另一个名称空间导入一个类型。或者,使用.*符号从其他名称空间导入所有类型。

import org.example.MyAsset
import org.example2.

9、装饰

9.1 装饰

资源的资源和属性可能会附加装饰器。装饰器用于使用元数据注释模型。下面的示例将foo装饰器添加到买方参与者,“arg1”和2作为参数传递给装饰器。

同样,装饰器可以附加到属性,关系和枚举值。

@foo("arg1", 2)
participant Buyer extends Person {
}

资源定义和属性可以用0或更多装饰来装饰。请注意,每个元素类型只允许一个装饰器的单个实例。也就是说,@bar装饰者在同一个元素上列出两次是无效的。

9.2 装饰者参数

装饰者可以有任意的参数列表(0或更多项)。参数值必须是字符串,数字或布尔值。

9.3 装饰者API

装饰器可以通过ModelManager introspect API在运行时访问。这允许外部工具和实用程序使用Composer建模语言(Composer Modeling Language,CTO)文件格式来描述核心模型,并使用足够的元数据为自己的目的进行装​​饰。

下面的例子检索附加到类声明的myField属性的foo装饰器的第三个参数:

const val = myField.getDecorator('foo').getArguments()[2];

转载于:https://my.oschina.net/mdxlcj/blog/1828308

精通Hyperledger之Hyperledger composer建模语言(15)相关推荐

  1. 面向对象基础及UML建模语言

    1.面向对象的方法起源于面向对象程序设计语言,其发展过程大体经历了初始阶段.发展阶段和成熟阶段. 2.面向对象方法主要优点 (1)从认识论的角度可以看出,面向对象方法改变了开发软件的方式. (2)面向 ...

  2. Python小白的数学建模课-15.图论的基本概念

    图论中所说的图,不是图形图像或地图,而是指由顶点和边所构成的图形结构. 图论不仅与拓扑学.计算机数据结构和算法密切相关,而且正在成为机器学习的关键技术. 本系列结合数学建模的应用需求,来介绍 Netw ...

  3. [201206][UML 精粹][标准对象建模语言简明指南][第3版][Martin Fowler][著]

    [201206][UML 精粹][标准对象建模语言简明指南][第3版][Martin Fowler][著][UMLChina][潘加宇][译] 第 1 章 简介 1.1 UML 是什么 1.2 使用 ...

  4. 语言auc_Phoenix建模语言(PML)中AUC的计算方法

    场景: 使用Phoenix建模语言(Phoenix Modeling Language,PML)制作模型的时候经常需要的一个操作是计算AUC,在PML中计算AUC的方法主要有两种,基于公式与基于积分. ...

  5. 统一建模语言UML轻松入门系列

    第五讲:统一建模语言UML轻松入门之综合实例 第四讲:统一建模语言UML轻松入门之动态建模 第三讲:统一建模语言UML轻松入门之静态建模:类和对象 第二讲:统一建模语言UML轻松入门之静态建模:用例 ...

  6. 统一建模语言UML要点全面简析

    前言 uml就是一些图,一些由框框和线条构成的图,框框称为事物,线条表示4种关系,加点这些框框和线条的说明注释. 一.uml概述 统一建模语言(UML)是面向对象软件的标准化建模语言. UML由3个要 ...

  7. 美国大学生数学建模竞赛15大热点问题

    美国大学生数学建模竞赛15大热点问题 1 论文很重要,尤其是摘要 2 论文提交邮箱务必不要使用QQ邮箱.谷歌邮箱等,建议使用163邮箱,发过去以后一定看看有没有退回! 3 不要集中在论文截至时间点提交 ...

  8. 一次搞懂建模语言UML

    Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到 ...

  9. 统一建模语言UML整理之开篇

    引言: 这段时间将致力于写UML方面的博客,由于个人能力的有限,如果博客中出现错误的地方还请广大博友批评指正.为了更好地了解一个过程或者事物,人们通常根据所研究对象的某些特征(形状.结构.或行为等)建 ...

  10. 【中级软考】UML图(Unified Modeling Language统一建模语言、标准建模语言)

    文章目录 UML图 UML图的作用 主要模型 功能模型 对象模型 动态模型 图的种类 用例图 类图 对象图 包图 活动图 状态图 1.概述: 2.构成要素: 2.1状态(States): 2.2转移( ...

最新文章

  1. Web性能优化之雅虎军规
  2. DDR3 IP设计说明
  3. java检测tomcat宕机_Tomcat意外宕机分析
  4. 一家典型的云原生企业,如何在创业早期数次“弯道超车”?
  5. “年薪25万只是白菜价”已成过去式,AI 岗位年薪下降8.9%!
  6. orm2 中文文档 3.3 模型钩子
  7. markdown 本地链接_Markdown从入门到入坑
  8. Oracle RAC Failover机制分析
  9. 程序员“不会”修电脑的原因
  10. layui upload 点击上传没有反应 JS动态加载
  11. 极域九法——小白看得懂的退出极域电子教室教程
  12. Excel表格中的删除操作,看看你会几种?
  13. 2021年 阿里云商标注册申请的相关详情及分类介绍
  14. 只需四天,从零开始选购笔记本电脑【转】【荐】
  15. Latex 语法 备忘录
  16. 知物由学 | iOS AssetBundle资源保护
  17. 微信小程序实现天气预报功能(支持自动定位)(附源码)
  18. centos 如何查看操作系统是哪个版本
  19. Android 《手机卫士》随听笔记
  20. AIX日志型文件系统的nbpi

热门文章

  1. php 数据结构set,ES6的Set数据结构是什么
  2. python前端工资_前端的工资分布情况-你又拖后退了吗?
  3. 学术会议查询 边缘计算_我设计了可以预测边缘性的“学术不诚实”的AI系统(SMART课堂)...
  4. java筛选excel数据_Excel中的筛选技巧有哪些,总结四种筛选技巧分享给大家
  5. 什么舱位_飞机的舱位究竟是怎么一回事儿
  6. 在服务中mysql启动不了了_mysql在服务项里无法启动
  7. sping jdbc 链接mysql_java项目使用spring jdbc连接数据库
  8. Python删除文件中含有特定值的行
  9. 57 Insert Interval
  10. 为-微软-重写-TechNet Library-中-Microsoft Lync Server 2010