Phenopacket Schema
项目描述
Phenopacket模式
这是作为GA4GH 临床表型数据捕获工作流的一部分产生的,它将现有的GA4GH元数据模式工作与来自phenopacket-reference-implementation的更专注的模型合并。
这是对原始phenopacket的重新定义版本,采用更以个人为中心的方法。采取这种新方法是为了简化表示和处理数据所需的代码,并且更好地表示这种在日常生活中使用的此类数据。
文档
核心文档可以在文档中找到
此README中的文档主要是为phenopacket-schema java库的用户编写的。
范围和目的
phenopacket-schema 的目标是在罕见病或癌症基因组诊断的背景下定义患者/样本的表型描述。它旨在提供足够且可共享的信息,以便临床医生或临床遗传学家能够在护理点捕获足够的数据结构,以便与其他实验室共享或在临床或研究环境中对数据进行计算分析,而无需在 EHR(电子健康记录)之外的数据。
该模式旨在定义一组共同、有限的数据类型,这些类型可以组成更专业的类型,以便使用共同的模式(如 base.proto 中定义)在资源之间进行数据共享。
此通用模式已用于定义“Phenopacket”,这是一个数据类型的汇总集合,专门用于表示罕见病或癌症样本,旨在进行初始数据捕获和分析。Phenopacket 设计为既适合人类阅读也适合机器阅读,并且可以与 HL7 快速医疗互操作性资源规范(即 FHIR®)互操作。
版本控制
该库使用语义版本控制。有关详细信息,请参阅 https://semver.org。
邮件列表
有关 Phenopackets 的公告的低量邮件列表位于 phenopackets@groups.io。有关此列表的更多信息可在 https://groups.io/g/phenopackets 找到。
用法
Phenopacket 模式使用 Protobuf 定义,它是一种“一种语言中性、平台中性、可扩展的序列化结构化数据机制”。有两种使用此库的方法,首先是将 Phenopacket 用作交换机制,其次是将它作为构建更专业消息的基本类型模式,同时允许与其他使用 Phenopackets 模式的资源轻松互操作。以下各节将描述如何实现这两件事。
将 phenopackets 包含到您的项目中
Java 开发者可以通过使用 Maven 导入 jar 将 phenopackets 纳入其代码中
<dependency>
<groupId>org.phenopackets</groupId>
<artifactId>phenopacket-schema</artifactId>
<version>${phenopacket-schema.version}</version>
</dependency>
在 Python 中使用 phenopackets 也同样简单
pip install phenopackets
直接交换 Phenopackets
如何使用这些的示例可以在测试目录中找到。phenopacket 中的字段之间(除了家系之外)没有定义显式关系,因此交换 phenopackets 的资源必须同意哪些是有效的,以及字段与 phenopacket 中其他字段的关系意味着什么。例如,Phenopacket.genes 字段可能被同意代表一个基因面板的基因,或者一组候选基因,或者可能是诊断的致病基因。
JSON/YAML 格式
可以使用来自 protobuf-java-util 库的 JsonFormat 类将 Phenopacket 之间在原生二进制格式和 JSON 之间转换。这也需要添加到您的 pom.xml 中
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>${protobuf.version}</version>
</dependency>
pip install protobuf
protobuf-java-util 为 Java 和 protobuf 为 Python 包含执行这些转换的简单实用方法。使用示例在此处展示
// Transform a Phenopacket into JSON
Phenopacket original = TestExamples.rareDiseasePhenopacket();
String asJson = JsonFormat.printer().print(original);
System.out.println(asJson);
// Convert the JSON back to a Phenopacket
Phenopacket.Builder phenoPacketBuilder = Phenopacket.newBuilder();
JsonFormat.parser().merge(jsonString, phenoPacketBuilder);
Phenopacket fromJson = phenoPacketBuilder.build();
// Convert the JSON into YAML (using Jackson)
JsonNode jsonNodeTree = new ObjectMapper().readTree(jsonString);
String yamlPhenopacket = new YAMLMapper().writeValueAsString(jsonNodeTree);
// Convert the YAML back into JSON (using Jackson)
JsonNode jsonNodeTree = new YAMLMapper().readTree(yamlString);
String jsonPhenopacket = new ObjectMapper().writeValueAsString(jsonNodeTree);
// And finally back into a Java object
Phenopacket.Builder phenoPacketBuilder2 = Phenopacket.newBuilder();
JsonFormat.parser().merge(jsonPhenopacket, phenoPacketBuilder2);
Phenopacket fromJson2 = phenoPacketBuilder2.build();
from google.protobuf.json_format import Parse, MessageToJson
from google.protobuf.timestamp_pb2 import Timestamp
from phenopackets import Phenopacket, Individual, PhenotypicFeature, OntologyClass
# Parsing phenopackets from json
with open('file.json', 'r') as jsfile:
phenopacket = Parse(message=Phenopacket(), text=jsfile.read())
# Writing phenopackets to json
with open('file.json', 'w') as jsfile:
subject = Individual(id="Zaphod", sex="MALE", date_of_birth=Timestamp(seconds=-123456798))
phenotypic_features = [PhenotypicFeature(type=OntologyClass(id="HG2G:00001", label="Hoopy")),
PhenotypicFeature(type=OntologyClass(id="HG2G:00002", label="Frood"))]
phenopacket = Phenopacket(id="PPKT:1", subject=subject, phenotypic_features=phenotypic_features)
json = MessageToJson(phenopacket)
jsfile.write(json)
从模式构建新消息
在 mme.proto 文件中包含了如何执行此操作的示例。在此处,Matchmaker Exchange (MME) API 已使用 phenopackets 模式实现,根据需要定义了自定义消息,但在适用的情况下重新使用了来自 base.proto 的消息。使用上述示例,也许 Phenopacket.genes 是一个问题,因为您不仅想记录已订购的基因面板,还想在两个单独的字段中记录发现的候选基因。在这种情况下,可以创建一个全新的定制消息,使用 Gene 作为构建块。
Git 子模块
此仓库使用 git 子模块 导入 VRS protobuf 实现。在克隆/更新后,您可能需要使用以下命令才能正确构建
$ git submodule update --init --recursive
构建
可以使用酷炫的 Takari maven wrapper 构建项目,无需本地安装 Maven。构建的唯一要求是拥有一个正常工作的 Java 安装和网络访问。
要执行此操作,请在项目根目录下运行包装脚本
$ ./mvnw clean install
或
$ ./mvnw.cmd clean install
为发布签名工件
有一个针对 Java 的 release-sign-artifacts 配置文件,可以通过以下命令触发
$ ./mvnw clean install -DperformRelease=true
运行以下命令以发布 Python 工件
测试
$ bash deploy-python.sh release-test
生产
$ bash deploy-python.sh release-prod
Java、Python 和 C++ 工件
构建项目将自动编译 Java、Python 和 C++ 工件。Java jar 文件可以直接用于任何 Java 项目。对于 Python 或 C++,构建工件可以在以下位置找到
target/generated-sources/protobuf/python
和
target/generated-sources/protobuf/cpp
其他语言需要将 src/main/proto 中的文件编译成它们期望的语言。protobuf 开发者网站提供了如何进行此操作的示例,例如 GO 或 C#。Protobuf 还支持许多其他语言。
项目详情
phenopackets-2.0.2.post4.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | a262a28dbf9851d2ad2e98bea1ccac4d00bebb9613f868020d2cb5f8a06adb9e |
|
MD5 | 7059675f665b5f36cb9d1e22eb9ae00c |
|
BLAKE2b-256 | 73b233a610b8e2438a9408fd767ef530c279ac0aa49dce6b756f22415d78a312 |
phenopackets-2.0.2.post4-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 6f3935d1875fb97e44584ffa4374d2078497f95c7331dc4a04ca6945ab110e45 |
|
MD5 | 804faf1cdc64460f984f1bb3c084a922 |
|
BLAKE2b-256 | 045ca1237f3f544f7036943eb263ca8a55dafba72dad895f40d7fa50801bd825 |