7个版本
0.0.7 | 2021年12月9日 |
---|---|
0.0.6 | 2021年11月29日 |
#1939 在 数据库接口
1KB
认识TypeQL(以及TypeDB)
TypeDB是一个具有丰富和逻辑类型系统的强类型数据库。TypeDB让您能够应对复杂问题,而TypeQL是它的查询语言。
更高的表达能力
TypeQL允许您根据逻辑和面向对象原则来建模您的领域。由实体类型、关系类型和属性类型以及类型层次、角色和规则组成,TypeQL允许您以比连接表、列、文档、顶点、边和属性更高的层次来思考。
实体-关系模型
TypeQL允许您使用广为人知的实体-关系模型来建模您的领域。它由实体类型、关系类型和属性类型组成,并引入了角色类型。TypeQL允许您利用ER模型的全部表达能力,并通过第一范式描述您的架构。
define
person sub entity,
owns name,
plays employment:employee;
company sub entity,
owns name,
plays employment:employer;
employment sub relation,
relates employee,
relates employer;
name sub attribute,
value string;
类型层次
TypeQL允许您轻松地将类型继承建模到您的领域模型中。遵循逻辑和面向对象原则,TypeQL允许数据类型继承其超类型的behaviours和properties。复杂的数据结构变得可重用,数据解释通过多态性变得更加丰富。
define
person sub entity,
owns first-name,
owns last-name;
student sub person;
undergrad sub student;
postgrad sub student;
teacher sub person;
supervisor sub teacher;
professor sub teacher;
N-ary关系
在现实世界中,关系不仅仅是两个事物之间的二元连接。在丰富的系统中,我们通常需要同时捕获三个或更多相互关联的事物。将它们表示为单独的二元关系将丢失信息。TypeQL可以自然地将任意数量的事物表示为一个关系。
match
$person isa person, has name "Leonardo";
$character isa character, has name "Jack";
$movie isa movie;
(actor: $person, character: $character, movie: $movie) isa cast;
get $movie;
answers>>
$movie isa movie, has name "Titanic";
嵌套关系
关系是我们用来描述两个或更多事物之间关联的概念。有时,这些事物本身也可以是关系。TypeQL可以自然地表示这些结构,因为它允许关系嵌套在另一个关系中,从而使您能够以最自然的形式表达系统的模型。
match
$alice isa person, has name "Alice";
$bob isa person, has name "Bob";
$mar ($alice, $bob) isa marriage;
$city isa city;
($mar, $city) isa located;
answers>>
$city isa city, has name "London";
更高的安全性
类型提供了一种描述数据逻辑结构的方法,使TypeDB能够验证您的代码是否正确地插入和查询数据。查询验证不仅限于静态类型检查,还包括无意义查询的逻辑验证。严格的类型检查错误使您拥有可以信赖的数据集。
逻辑数据验证
插入的数据会经过比属性值类型静态检查更严格的验证。实体将只验证包含正确的属性,关系将只验证逻辑上允许的事物之间的关联。TypeDB通过评估涉及事物的多态类型,对插入的实体和关系执行更丰富的验证。
insert
$charlie isa person, has name "Charlie";
$dataCo isa company, has name "DataCo";
(husband: $charlie, wife: $dataCo) isa marriage; # invalid relation
commit>>
ERROR: invalid data detected during type validation
逻辑查询验证
在TypeDB上执行的读取查询将经过类型解析过程。这个过程不仅优化了查询的执行,还充当静态类型检查器,拒绝无意义和不可满足的查询,因为它们很可能是用户错误。
match
$alice isa person, has name "Alice";
$bob isa person, has name "Bob";
($alice, $bob) isa marriage;
$dataCo isa company, has name "DataCo";
($bob, $dataCo) isa marriage; # invalid relation
answers>>
ERROR: unsatisfiable query detected during type resolution
随着逻辑推理的发展
TypeDB通过推理引擎对您的数据进行逻辑编码。它启用类型推理和规则推理,从而创建数据的逻辑抽象。这允许发现难以找到的事实和模式;并且复杂查询变得简单得多。
规则
TypeQL允许您在模式中定义规则。这扩展了您模型的表达能力,因为它使系统能够在数据集中满足某种逻辑形式时得出新的结论。像编程中的函数一样,规则可以相互链接,在数据级别创建行为抽象。
define
rule transitive-location:
when {
(located: $x, locating: $y);
(located: $y, locating: $z);
} then {
(located: $x, locating: $z);
};
推理
TypeDB的推理功能将一个查询转换为其所有可能的解释。这是通过两种机制实现的:基于类型和基于规则的推理。这不仅得出新的结论并揭示隐藏的关系,还使复杂的模式抽象为简单的查询。
match
$person isa person;
$uk isa country, has name "UK";
($person, $uk) isa location;
get $person;
answers>>
$person isa teacher, has name "Alice";
$person isa postgrad, has name "Bob";
使用TypeQL
TypeQL(原生语法)
所有TypeDB客户端以及TypeDB控制台都原生支持TypeQL语法。如果您正在使用TypeDB,您不需要额外的库/工具即可原生使用TypeQL语法。
TypeQL for Java
语言库
要使用TypeQL语言库进行Java编程,以便能够以编程方式构建查询而不是手动字符串连接,请访问vaticle/typeql-lang-java
语法
如果您想开发Java中的TypeQL插件或扩展,并需要TypeQL语法库,您可以导入以下Maven包。
<repositories>
<repository>
<id>repo.vaticle.com</id>
<url>https://repo.vaticle.com/repository/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.vaticle.typeql</groupId>
<artifactId>typeql-grammar</artifactId>
<version>{version}</version>
</dependency>
</dependencies>
将{version}
替换为版本号,您可以在我们的Maven仓库中找到最新的TypeQL语法。
TypeQL for Python
语言库
要使用TypeQL语言库进行Python编程,以便能够以编程方式构建查询而不是手动字符串连接,请访问typedb-osi/typeql-lang-python。该项目目前正在社区中开发。欢迎您为项目开发做出贡献。
语法
如果您想开发Python中的TypeQL插件或扩展,并需要TypeQL语法库,您可以导入以下PyPI包。
pip install typeql-grammar=={version}
将{version}
替换为版本号,您可以在TypeQL的PyPi页面上找到最新的版本。
贡献
TypeDB & TypeQL 在其发展过程中使用了各种开源的图和分布式计算框架。如今,TypeDB & TypeQL 是基于以下框架构建的:RocksDB,ANTLR,SCIP,Bazel,GRPC,和 ZeroMQ,以及 Caffeine。在过去,TypeDB 由各种开源技术和社区支持,我们对此深表感激:Apache Cassandra,Apache Hadoop,Apache Spark,Apache TinkerPop,和 JanusGraph。谢谢!
许可协议
TypeQL 语言及相关材料按照由自由软件基金会发布的 GNU Affero 通用公共许可证 v3.0 ("AGPL 3.0") 进行分发,但有以下特殊例外。
AGPL 3.0 的例外:任何基于 Vaticle TypeQL 仓库中的材料或材料构建的 TypeQL 语言库,并且用于与使用或通过 Vaticle Limited(英国公司编号 08766237)或其任何继任实体(但排除该软件的任何分支版本)创建、管理或访问的数据库进行通信或交互(每种情况),可以按照以下许可证之一进行分发
- Apache 许可证版本 2:https://www.apache.org/licenses/LICENSE-2.0.txt
- MIT 许可证:https://opensource.org/licenses/MIT
- BSD 许可证(2 条款):https://opensource.org/licenses/BSD-2-Clause
如上所述,“继任实体”是指当时拥有 TypeDB 软件版权的任何实体,这些版权之前属于 Vaticle Ltd。
如果您对 TypeQL 代码或相关材料进行了任何更改或贡献,那么此例外将适用于使用或实现该更改/贡献的任何 TypeQL 语言库。
依赖项
~1.5MB
~37K SLoC