跳转到主要内容

未提供项目描述

项目描述

SemSQL:RDF/OWL本体标准SQL视图

PyPI version

本项目提供一组标准SQL表/视图,以便您可以执行此类查询,例如,在HPO中查找所有以“Abnormality”开头的术语。

$ sqlite db/hp.db
sqlite> SELECT * FROM rdfs_label_statement WHERE value LIKE 'Abnormality of %';
stanza 主题 谓词 对象 数据类型 语言
HP:0000002 HP:0000002 rdfs:label 身体高度异常 xsd:string
HP:0000014 HP:0000014 rdfs:label 膀胱异常 xsd:string
HP:0000022 HP:0000022 rdfs:label 男性内生殖器异常 xsd:string
HP:0000032 HP:0000032 rdfs:label 男性外生殖器异常 xsd:string

对于OBO中的任何本体,都可以下载现成的SQLite3构建版本,使用如下URL:https://s3.amazonaws.com/bbop-sqlite/hp.db

relation-graph 用于预先生成蕴涵边的表格。例如,Uberon中所有手指的is-a和part-of祖先。

$ sqlite db/uberon.db
sqlite> SELECT * FROM entailed_edge WHERE subject='UBERON:0002389' and predicate IN ('rdfs:subClassOf', 'BFO:0000050');
主语,谓语,宾语
UBERON:0002389, BFO:0000050, UBERON:0015212
UBERON:0002389, BFO:0000050, UBERON:5002389
UBERON:0002389, BFO:0000050, UBERON:5002544
UBERON:0002389, rdfs:subClassOf, UBERON:0000061
UBERON:0002389, rdfs:subClassOf, UBERON:0000465
UBERON:0002389, rdfs:subClassOf, UBERON:0000475

SQLite提供了许多优势

  • 可以下载文件,然后在没有网络延迟的情况下查询
  • 与查询静态rdf、owl或obo文件相比,没有启动/解析延迟
  • 健壮且性能优异
  • 支持多种语言,表现卓越

尽管重点是SQLite,但此库也可用于PostgreSQL、MySQL、Oracle等其他数据库管理系统

教程

安装

SemSQL附带一个Python辅助库。使用此库是可选的。要安装

pip install semsql

下载现成的SQLite数据库

每周为所有OBO本体和部分其他本体预生成SQLite数据库(见ontologies.yaml

要下载

semsql download obi -o obi.db

或直接使用以下格式的URL下载

附加数据库

如果您使用sqlite3,则可以将数据库附加起来,以便进行跨数据库连接。

例如,许多本体使用ORCID URI作为dcterms:contributordcterms:creator语句的对象,但这些是“悬空”的。这些ORCID的元数据可在semsql或cid数据库实例中找到(从wikidata-orcid-ontology派生),在Orcid表中。

您可以使用ATTACH DATABASE连接两个数据库,例如

$ sqlite3 db/cl.dl
sqlite> attach 'db/orcid.db' as orcid_db;
sqlite> select * from contributor inner join orcid_db.orcid on (orcid.id=contributor.object) where orcid.label like 'Chris%';
obo:cl.owl|obo:cl.owl|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
CL:0010001|CL:0010001|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
CL:0010002|CL:0010002|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
CL:0010003|CL:0010003|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
CL:0010004|CL:0010004|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000093|UBERON:0000093|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000094|UBERON:0000094|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000095|UBERON:0000095|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000179|UBERON:0000179|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000201|UBERON:0000201|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000202|UBERON:0000202|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000203|UBERON:0000203|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall
UBERON:0000204|UBERON:0000204|dcterms:contributor|orcid:0000-0002-6601-2165||||orcid:0000-0002-6601-2165|Christopher J. Mungall

从OWL文件创建SQLite数据库

有两种协议可以完成此操作

  1. 安装构建依赖项
  2. 使用Docker

在两种情况下

  • 输入必须以RDF/XML序列化形式提供,并且具有后缀.owl
  • 如果格式不同,请使用robot进行转换

我们计划在将来简化此过程。

1. 直接构建SQLite数据库

这需要一些关于如何在您的计算机上安装东西以及如何将东西放入您的PATH的基本技术知识。不需要Docker。

要求

安装这些并在您的路径中放置relation-graph和rdftab.rs之后

semsql make foo.db

这假设foo.owl在同一个文件夹中

2. 使用Docker

可以使用两个Docker镜像

ODK镜像可能落后

docker run  -v $PWD:/work -w /work -ti linkml/semantic-sql semsql make foo.db

模式

模式文档

源模式位于LinkML中 - 然后将其编译为SQL表和视图

基本思想如下

有一些“基本表”

所有其他表实际上都是视图(派生表),并提供了便利。

ORM层

可以通过与任何其他SQLdb完全相同的方式进行访问SemSQL关系数据库

为了方便,我们提供了使用SQLAlchemy的Python对象关系映射(ORM)层。这允许编写如下代码,该代码将RdfsSubclassOfStatement存在性约束连接起来

engine = create_engine(f"sqlite:////path/to/go.db")
SessionClass = sessionmaker(bind=engine)
session = SessionClass()
q = session.query(RdfsSubclassOfStatement)
q = q.add_entity(OwlSomeValuesFrom)
q = q.join(OwlSomeValuesFrom, RdfsSubclassOfStatement.object == OwlSomeValuesFrom.id)

lines = []
for ax, ex in q.all():
    line = f'{ax.subject} subClassOf {ex.on_property} SOME {ex.filler}'
    logging.info(line)
    lines.append(line)

(此示例仅用于说明 - 同样可以实现相同功能的更简单的边关系)

应用

semSQL Python库是故意低级别的 - 我们建议使用ontology-access-kit

例如

runoak -i db/envo.db search t~biome

您还可以传递一个OWL文件,并动态创建sqlite数据库

runoak -i sqlite:envo.owl search t~biome

即使使用OAK,直接访问SQL表以进行高效的复杂多连接查询也可能很有用。

优化

poetry run semsql view2table edge --full-index | sqlite3 $db/mydb.db

有关一些现成的索引,请参阅索引

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

semsql-0.3.3.tar.gz (115.0 kB 查看散列)

上传时间

构建分布

semsql-0.3.3-py3-none-any.whl (132.9 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF 赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页面