未提供项目描述
项目描述
SemSQL:RDF/OWL本体标准SQL视图
本项目提供一组标准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: notebooks/SemanticSQL-Tutorial.ipynb
- 使用OAK: OAK教程的第七部分
安装
SemSQL附带一个Python辅助库。使用此库是可选的。要安装
pip install semsql
下载现成的SQLite数据库
每周为所有OBO本体和部分其他本体预生成SQLite数据库(见ontologies.yaml)
要下载
semsql download obi -o obi.db
或直接使用以下格式的URL下载
附加数据库
如果您使用sqlite3,则可以将数据库附加起来,以便进行跨数据库连接。
例如,许多本体使用ORCID URI作为dcterms:contributor
和dcterms: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数据库
有两种协议可以完成此操作
- 安装构建依赖项
- 使用Docker
在两种情况下
- 输入必须以RDF/XML序列化形式提供,并且具有后缀
.owl
- 如果格式不同,请使用robot进行转换
我们计划在将来简化此过程。
1. 直接构建SQLite数据库
这需要一些关于如何在您的计算机上安装东西以及如何将东西放入您的PATH的基本技术知识。不需要Docker。
要求
安装这些并在您的路径中放置relation-graph和rdftab.rs之后
semsql make foo.db
这假设foo.owl在同一个文件夹中
2. 使用Docker
可以使用两个Docker镜像
- ODK
- semantic-sql
ODK镜像可能落后
docker run -v $PWD:/work -w /work -ti linkml/semantic-sql semsql make foo.db
模式
见模式文档
源模式位于LinkML中 - 然后将其编译为SQL表和视图
基本思想如下
有一些“基本表”
- 语句
- 前缀
- entailed_edge - 由relation-graph填充
所有其他表实际上都是视图(派生表),并提供了便利。
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
有关一些现成的索引,请参阅索引
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。