十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何通过 SPARQL 查询 OpenMetadata 元数据并以 JSON-LD 导出实体

如何通过 SPARQL 查询 OpenMetadata 元数据并以 JSON-LD 导出实体 如何通过 SPARQL 查询 OpenMetadata 元数据并以 JSON-LD 导出实体【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadataOpenMetadata 支持以 RDF 知识图谱方式组织元数据底层使用 Apache Jena Fuseki 作为三元组存储。启用后你可以用 SPARQL 查询元数据血缘、扩展属性等也可以按实体导出 JSON-LD以及 Turtle、RDF/XML、N-Triples序列化结果。本文基于 docs/rdf-local-development.md 与 docs/rdf-ontology-contract.md给出从启动 RDF 环境、执行 SPARQL 查询到以 JSON-LD 导出实体的完整操作路径。启动带 Fuseki 的本地环境前提条件文档明确要求已安装 Docker 和 Docker ComposeMySQL 或 PostgreSQL 在运行作为 OpenMetadata 后端Elasticsearch 在运行用于搜索。注意标准的本地 Docker 启动脚本./docker/run_local_docker.sh -d mysql不会启用 RDF 或启动 Fuseki。要得到带 RDF 支持的环境使用 RDF 专用启动脚本# MySQL 后端 ./docker/run_local_docker_rdf.sh -d mysql # PostgreSQL 后端 ./docker/run_local_docker_rdf.sh -d postgresql该脚本会启动 OpenMetadata、后端数据库、搜索服务、ingestion 服务以及 Fuseki其中 Fuseki 的配置为端口3030管理密码admin数据集openmetadata内存分配 2–4GB如果希望服务器也跑在 Docker 里而不是 IntelliJ 中并带 UI完整命令为./docker/run_local_docker_rdf.sh -m ui -d mysql -f true参数含义文档给出-m ui|no-ui是否带 UI-d mysql|postgresql数据库类型-f true|false是否为 RDF 启动 Fuseki-s true|false跳过 Maven 构建-x true|false在 5005 端口开启 JVM 调试。启动后先确认 Fuseki 存活# 检查 Fuseki 健康 curl -s http://localhost:3030/$/pingFuseki Web UI 位于http://localhost:3030用户名和密码均为admin。验证 RDF 已启用OpenMetadata 服务器默认端口8585提供 RDF 状态接口curl http://localhost:8585/api/v1/rdf/status文档给出的预期响应为{enabled: true}如果返回不是enabled: true按文档排查检查启动方式/环境变量是否设置了RDF_ENABLEDtrue查看服务器日志中是否出现RDF knowledge graph support initialized的初始化记录并确认 conf/openmetadata.yaml 中rdf配置段enabled、remoteEndpoint、dataset等与你的 Fuseki 实例一致。该配置段支持的环境变量如RDF_ENABLED、RDF_ENDPOINT、RDF_DATASET、RDF_REMOTE_USERNAME/RDF_REMOTE_PASSWORD可在 docs/rdf-local-development.md 的 Environment Variables 表格中查阅默认端点为http://localhost:3030/openmetadata默认数据集为openmetadata。通过 API 执行 SPARQL 查询RDF 启用后SPARQL 查询接口为POST /api/v1/rdf/sparql请求体为 JSON# 执行 SPARQL 查询 # token 需替换为你的 OpenMetadata 认证 token curl -s -X POST \ -H Authorization: Bearer token \ -H Content-Type: application/json \ -d {query: SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10} \ http://localhost:8585/api/v1/rdf/sparql | jq查询血缘方向docs/rdf-ontology-contract.md 说明了血缘三元组的写法对一条从source到output的 SQL 血缘边存储中同时存在两个方向因此直接查询不需要推理机prefix om: https://open-metadata.org/ontology/ . prefix prov: http://www.w3.org/ns/prov# . output om:upstream source ; prov:wasDerivedFrom source . source om:downstream output .要点均来自该文档om:upstream是prov:wasDerivedFrom的子属性om:upstream不等价于dcat:qualifiedRelation后者指向实体化关系节点而非上游资产旧的大写om:UPSTREAM三元组方向为 source 到 output已被弃用但仍可被读取图导出时会把血缘谓词归一化为 source-to-output 方向。查询扩展属性Extension Values自定义扩展字段不是动态生成的om:ext_*谓词而是固定的键值词汇表。例如查询某个资产上的costCenter扩展值PREFIX om: https://open-metadata.org/ontology/ SELECT ?asset ?costCenter WHERE { ?asset om:hasExtension/om:hasExtensionProperty ?entry . ?entry om:extensionKey costCenter ; om:extensionValue ?costCenter . }查询前理解谓词的可用性状态docs/rdf-ontology-contract.md 定义了本体中om:projectionStatus的两种状态写查询前应先区分状态含义om:Stored投影会在对应字段或关系被填充时写入该谓词在inferencenone下即可查询。可选字段不一定出现在每个实体上。om:InferenceOnly元数据投影不会写入该谓词。它保留用于自定义推理、外部本体数据或注释中说明的显式导出路径仅启用 RDFS 或 OWL 并不保证能查到匹配的三元组。因此查询某个谓词前先确认它是om:Stored还是om:InferenceOnly避免对om:InferenceOnly谓词期待投影产生的三元组。完整谓词声明见 openmetadata.ttl。可选在 Fuseki Web UI 中直接查询不经过 OpenMetadata API 时也可以在 Fuseki 界面执行查询http://localhost:3030/#/dataset/openmetadata/query。数据集管理在http://localhost:3030/#/manage。以 JSON-LD 导出实体单实体的 RDF 序列化接口为GET /api/v1/rdf/entity/{entityType}/{id}默认返回 JSON-LD{entityType}和{id}需替换为实体类型文档示例用table与实体 ID# 获取表实体的 JSON-LD默认格式 # token 替换为你的认证 tokentable-id 替换为目标表的实体 ID curl -s -H Authorization: Bearer token \ http://localhost:8585/api/v1/rdf/entity/table/table-id | jq其他序列化格式通过format查询参数指定# Turtle GET /api/v1/rdf/entity/{entityType}/{id}?formatturtle # RDF/XML GET /api/v1/rdf/entity/{entityType}/{id}?formatrdfxml # N-Triples GET /api/v1/rdf/entity/{entityType}/{id}?formatntriples另外词表Glossary关系图有专门接口例如按词表过滤主术语图# glossary-id 替换为目标词表 ID curl -s -H Authorization: Bearer token \ http://localhost:8585/api/v1/rdf/glossary/graph?glossaryIdglossary-id | jq可选参数glossaryTermId限定某个术语及其直接邻居、relationTypes逗号分隔的关系类型、limit默认 500、offset、includeIsolated默认 true。确保三元组库已填充数据查询能返回结果的前提是 Fuseki 数据集中已有三元组。两种方式自动索引RDF 启用后实体的创建、更新、删除操作会自动同步到三元组库。手动重建索引将存量实体灌入三元组库触发 RdfIndexApp# admin-token 需替换为具备管理员权限的 token curl -X POST \ -H Authorization: Bearer admin-token \ -H Content-Type: application/json \ -d {entities: [], recreateIndex: true, batchSize: 100} \ http://localhost:8585/api/v1/rdf/../../apps/trigger/RdfIndexApp上面末段路径按文档原文为http://localhost:8585/api/v1/apps/trigger/RdfIndexApp触发器接口非 RDF 接口curl -X POST \ -H Authorization: Bearer admin-token \ -H Content-Type: application/json \ -d {entities: [], recreateIndex: true, batchSize: 100} \ http://localhost:8585/api/v1/apps/trigger/RdfIndexApprecreateIndex: true表示重建索引docs/rdf-ontology-contract.md 还提到升级后需要对已有 RDF 存储执行一次带recreateIndextrue的完整重建以替换遗留的血缘与扩展三元组。相关实现可参考 RdfIndexApp。排查与数据重置Fuseki 连不上文档给出的检查顺序docker ps | grep fuseki curl http://localhost:3030/$/ping docker logs openmetadata-fuseki # 确认数据集存在 curl -u admin:admin http://localhost:3030/$/datasetsSPARQL 查询报错确认 OpenMetadata 服务器能访问 Fuseki确认数据集名与配置一致默认openmetadata查看 Fuseki 日志中的查询错误。重置 Fuseki 数据可选副作用需知悉以下操作会删除整个openmetadata_fuseki-data卷即清空全部 RDF 数据仅适用于确定要推倒重来的场景# 停止 Fuseki docker compose -f docker/development/docker-compose-fuseki.yml down # 删除数据卷删除后 RDF 数据不可恢复 docker volume rm openmetadata_fuseki-data # 重新启动 Fuseki docker compose -f docker/development/docker-compose-fuseki.yml up -d限制与下一步标准run_local_docker.sh流程不含 RDF只有run_local_docker_rdf.sh路径会启用 Fuseki。om:InferenceOnly谓词不能指望从元数据投影中查到三元组写查询前对照本体的om:projectionStatus注释。查询谓词的完整清单以 openmetadata.ttl 为准RDF 相关 API 实现见 RdfResource.java。Fuseki 容器定义在 docker/development/docker-compose-fuseki.yml。生产环境的 sizing、调优、compaction、调度与监控不在本文范围内见 docs/rdf-production-setup.md。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表