Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱

  • 0. 引言
  • 1. 查看 RDF Semantic Graph 安装情况
  • 2. 创建一个语义网络
  • 4. 创建一个模型
  • 5. 加载 RDF 文件
  • 6. 配置 W3C 标准的 SPARQL 端点

0. 引言

Oracle Graph 的中文资料太少了,只能自己参考英文资料整理一篇吧。

Oracle 数据库包括一个企业级资源描述框架 (RDF) 三元存储,作为空间和图选项的一部分。RDF 是 W3C 标准的图数据模型,用于表示知识图谱,知识图谱越来越多地用于支持智能应用程序。

本文主要介绍如何在 Oracle Database 23ai 上配置 Oracle Spatial and Graph — RDF Semantic Graph。我们将使用 Oracle SQL Developer 进行与 Oracle Database 23ai 实例的大部分交互。

1. 查看 RDF Semantic Graph 安装情况

我们使用 system 用户连接到 Oracle Database,执行下面语句,

SELECT * FROM MDSYS.RDF_PARAMETER;

在这里插入图片描述
查询结果应显示有效的 RDF Semantic Graph 23.1.0.0.0 安装。

如果没有启用,执行下面语句,

@?/rdf/admin/rdfsqlj.sql
@?/md/admin/catmd.sql

2. 创建一个语义网络

接下来,我们将创建一个语义网络来准备用于存储 RDF 数据的数据库。作为先决条件,我们需要为语义网络创建一个表空间。以 SYSTEM 身份运行以下 SQL 语句,为语义网络创建表空间。

CREATE TABLESPACE rdf_tblspaceDATAFILE 'rdf_tblspace.dat' SIZE 10240M REUSEAUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITEDSEGMENT SPACE MANAGEMENT AUTO;

创建一个数据库用户以处理数据库中的语义数据,并向数据库用户授予必要的权限。

CREATE USER rdfuser
IDENTIFIED BY rdfuser
QUOTA 9G ON rdf_tblspace;GRANT CONNECT, RESOURCE, CREATE VIEW TO rdfuser;ALTER USER rdfuser QUOTA UNLIMITED ON users;

以网络所有者用户rdfuser身份进行连接。
现在,我们可以执行下面语句来创建语义网络。

EXECUTE SEM_APIS.CREATE_SEM_NETWORK('rdf_tblspace', network_owner=>'rdfuser', network_name=>'rdf_net');

或者,我们可以使用 SQL Developer 的 RDF Semantic Graph 组件来创建语义网络。通过单击连接名称旁边的加号来展开系统连接,然后向下滚动到 “RDF 语义图形” 组件。右键单击 “网络”,然后选择 “创建语义网络”。
在这里插入图片描述

使用下拉菜单选择我们之前创建的表空间,然后单击应用。

在这里插入图片描述

这样,我们已经验证了 RDF Semantic Graph 的安装,并创建了存储 RDF 数据所需的所有必要数据库对象。

4. 创建一个模型

创建模型时,可以指定模型名称、用于保存对模型语义数据的引用的表以及该表中 SDO_RDF_TRIPLE_S 类型的列。

以下命令创建在 net1 schema-private network 中命名 LGC_SPORT 的模型。

EXECUTE SEM_APIS.CREATE_SEM_MODEL('LGC_SPORT', null, null, 'RDF_TBLSPACE',network_owner=>'RDFUSER',network_name=>'RDF_NET');

或者,我们可以使用 SQL Developer 的 RDF Semantic Graph 组件来创建模型。

在这里插入图片描述
在这里插入图片描述

我们现在已经创建了一个模型来保存我们的 RDF 数据。如果在 RDF Semantic Graph 下展开 Models 和 Regular Models,您应该会看到我们创建的 LGD_SPORT 模型。

5. 加载 RDF 文件

我们将使用 120 万个体育设施的三重数据集,从这里下载。

现在,我们将批量加载下载的 RDF 文件。批量加载过程包括两个主要步骤:

1,将文件从文件系统加载到数据库中的简单临时表中。
2,将数据从暂存表加载到我们的语义模型中。

第一步涉及从外部表加载,因此我们需要使用 SYSTEM 连接在数据库中创建一个 DIRECTORY,并将该目录的权限授予 RDFUSER。

现在服务器上创建一个目录。

mkdir -p /home/oracle/data/graph_dump

然后,我们可以使用 SQL Developer,展开 SYSTEM 连接并右键单击 Directories。然后选择 Create Directory (创建目录)。

输入数据库服务器上目录的目录名称和完整路径。单击应用。

在这里插入图片描述
在这里插入图片描述
展开“目录”,然后单击目录名称以查看详细信息。

在这里插入图片描述

现在我们需要将此目录的权限授予 RDFUSER。单击“操作”,然后选择“授予”。

在这里插入图片描述
授予 RDFUSER 的 READ 和 WRITE 权限。单击应用。

在这里插入图片描述
RDFUSER 现在可以访问 Oracle Database 实例上的 /home/oracle/data/graph_dump 目录。

下载的 RDF 文件是压缩的,在加载到暂存表之前,我们在windows系统解压缩之后,在上传到 Oracle Database 实例的 /home/oracle/data/graph_dump 目录。

现在,在 SQL Developer 中展开 RDFUSER 连接,并展开 RDF Semantic Graph 组件。然后右键单击“模型”,然后选择“将RDF数据加载到暂存表(外部表)”。

在这里插入图片描述

为要创建的外部表选择一个名称(我们正在使用LGD_EXT_TAB),并填写“源外部表”选项卡上的其他字段。

在这里插入图片描述

在“输入文件”选项卡上输入要加载的文件的名称(在本例中为 2015-11-02-SportThing.node.sorted.nt)。

在这里插入图片描述

最后,使用“暂存表”选项卡输入将要创建的暂存表的名称(我们正在使用LGD_STG_TAB)并选择适当的格式。

在这里插入图片描述

现在,单击“应用”将数据加载到LGD_STG_TAB中。 检查LGD_STG_TAB的内容。

SELECT count(*) FROM lgd_stg_tab;

在这里插入图片描述

接下来,我们将LGD_STG_TAB的数据加载到LGD_SPORT语义模型中。要启动批量加载接口,请在 RDFUSER 连接下展开 RDF Semantic Graph。然后,右键单击“模型”并选择“从暂存表批量加载到模型中”。

在这里插入图片描述

输入 Model 的 LGD_SPORT 并取消选择 Create model 选项,因为我们已经创建了这个语义模型。此外,为暂存表名称选择LGD_STG_TAB。请注意不要选择外部表 (LGD_EXT_TAB),因为它也会被列出。有关批量加载的其他选项的更多信息,请参阅用户指南。单击“应用”,加载将在一分钟左右完成。

在这里插入图片描述

现在我们已经完成了批量加载,收集整个RDF网络的统计信息是个好主意。只有特权用户才能收集整个 RDF 网络的统计信息,因此我们需要使用 SYSTEM 用户或其他 DBA 用户。展开 SYSTEM 连接下的 RDF Semantic Graph 组件,右键单击 RDF Semantic Graph 并选择 Gather Statistics。

在这里插入图片描述

输入所需的并行度,然后单击应用。

在这里插入图片描述

收集统计信息后,数据即可查询。

现在,我们将使用 SQL Developer 的 SPARQL 查询编辑器来查询我们的数据集。返回到 RDFUSER 连接,并在 RDF Semantic Graph 下展开 Models 和 Regular Models。单击“LGD_SPORT”将打开此语义模型的 SPARQL 查询编辑器。

在这里插入图片描述

您可以在此处编辑和执行 SPARQL 查询。此外,还提供了几个预先创建的模板。

单击模板 -> 人口统计 -> 全部计数以计算LGD_SPORT模型中的所有三元组。

在这里插入图片描述

出现警告时单击“是”。

单击绿色三角形以运行查询。

在这里插入图片描述

您也可以直接编辑 SPARQL 查询。下面的示例演示一个 SPARQL 查询,用于获取前 10 个属性及其三元组计数。

PREFIX  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  owl: <http://www.w3.org/2002/07/owl#>
PREFIX  xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX   dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>SELECT ?p (COUNT(?o) as ?cnt)  
WHERE { ?s ?p ?o }
GROUP BY ?p
ORDER BY DESC (?cnt)
LIMIT 10

除了 SPARQL SELECT 查询之外,还支持 CONSTRUCT 和 DESCRIBE 查询。下面的查询描述了LGD_SPORT模型中的特定资源。请注意,查询中使用的任何命名空间前缀也将用于简化查询结果中的值。在这里,我们又添加了几个前缀。

PREFIX  rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  owl: <http://www.w3.org/2002/07/owl#>
PREFIX  xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX   dc: <http://purl.org/dc/elements/1.1/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>DESCRIBE <http://linkedgeodata.org/triplify/node2872672301>

在这里插入图片描述

就是这样。我们已经成功地将一个公开可用的 RDF 数据集批量加载到我们的 DBCS 实例中,并使用 SQL Developer 的 SPARQL 查询编辑器执行了一些查询。

6. 配置 W3C 标准的 SPARQL 端点

我们将通过配置 W3C 标准的 SPARQL 端点来完成 Oracle Database 中 RDF 三元组存储的设置。

W3C 定义了几个用于查询和更新 RDF 数据的标准 REST API。Oracle RDF Semantic Graph 利用 Apache Jena Fuseki 提供这些接口的实现。Oracle 对 Apache Jena 的支持通过特定于 Oracle 的 Apache Jena 接口实现,在 Apache Jena 和 Oracle RDF Semantic Graph 之间实现了紧密集成。

这篇博文将展示如何在 Oracle Database 实例上设置和运行 Apache Jena Fuseki。Fuseki 可以作为独立服务器或 Java Web 应用程序运行。

第一步是从 OTN 下载最新的 Oracle 对 Apache Jena 的支持。打开 Web 浏览器进行 http://www.oracle.com/technetwork/database/options/spatialandgraph/downloads/index-156999.html。选择下载 Oracle Database 12c Release 12.1.0.2 Support for Apache Jena 3.1、Apache Jena Fuseki 2.4 和 Protégé Desktop 5.0。

下载完成后,将下载的 Oracle Support for Apache Jena 文件传输到 Oracle Database 实例。在此示例中,我们将文件复制到 /home/oracle。

以 oracle 用户身份打开与 Oracle Database 实例的 SSH 连接。

在 /home/oracle 中创建一个名为 Jena 的目录。然后将rdf_semantic_graph_support_for_12c_and_jena310_protege_5.0_2017_01_19.zip移动到新创建的 Jena 目录并解压缩文件。

解压缩命令完成后,您将看到几个目录和一个 README 文件。

现在,我们将配置 Fuseki 以访问我们之前创建的LGD_SPORT语义模型。将目录更改为 /fuseki 并编辑 config-oracle.ttl 文件。

将以下默认<#oracle>数据集规范从

<#oracle> rdf:type oracle:Dataset;oracle:connection[ a oracle:OracleConnection ;oracle:jdbcURL “jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))”;oracle:User “rdfuser” ;oracle:Password “rdfuser”];oracle:allGraphs [ oracle:firstModel “TEST_MODEL” ] .

改为,

<#oracle> rdf:type oracle:Dataset;oracle:connection[ a oracle:OracleConnection ;oracle:jdbcURL “jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=PDB1.uspm020.oraclecloud.internal)))”;oracle:User “rdfuser” ;oracle:Password “rdfuser”];oracle:allGraphs [ oracle:firstModel “LGD_SPORT” ] .

请注意,根据特定 Oracle Database 实例的设置,SERVICE_NAME会有所不同。

接下来,我们将更改默认的 shiro.ini 配置以允许非本地主机连接。首先,我们需要启动 Fuseki 来创建一个 /run 目录。只需在当前 /fuseki 目录中执行以下命令即可。

./fuseki-server

看到 Fuseki 已在端口 3030 上启动的消息后,使用 Ctrl-C 终止该进程。

现在应该创建 /run 目录。将目录更改为 /run 并编辑shiro.ini。

Replace

/$/** = localhostFilter 

with

/$/server = anon
$/** = localhostFilter

将目录更改回 /fuseki 并通过运行以下命令启动 Fuseki 服务:

nohup ./fuseki-server — config config-oracle.ttl > fuseki_out.log &

请注意,我们使用 nohup 来防止 Fuseki 进程在连接关闭时终止。

就是这样。Fuseki SPARQL 端点现已在我们的 Oracle Database 实例上启动并运行。

现在,Fuseki 服务器已在 DBCS 实例的端口 3030 上启动并运行,有两种连接选项:

单击“查询”,打开 SPARQL 查询界面。

单击“信息”可查看所有可用的 REST 端点。

我们还可以使用 curl 测试 SPARQL REST 接口。在此示例中,我们在 Windows 客户端计算机上使用 Cygwin 终端。以下 curl 命令会将文件 test_query.rq 中的 SPARQL 查询发送到 DBCS 实例上运行的 Fuseki 端点,并将结果打印到 stdout。

curl –X POST –data-binary “@test_quey.rq” –H “Content-Type: application/sparql-query” –H “Accept: application/sparql-results+json” “http://localhost:3030/sparql"

大功告成!我们已成功访问在 Oracle Database 实例上运行的 W3C 标准 SPARQL REST 端点。

“Oracle Graph 入门 — RDF 知识图谱”文章到此结束。

reference:

  • https://docs.oracle.com/en/database/oracle/oracle-database/23/rdfrm/getting-started-rdf-data-schema-private-network.html
  • https://medium.com/oracledevs/getting-started-with-oracle-spatial-and-graph-rdf-knowledge-graph-part-1-fa400427c6bd
  • https://medium.com/oracledevs/getting-started-with-oracle-spatial-and-graph-rdf-knowledge-graph-part-2-2def0bc08a5c
  • https://medium.com/oracledevs/getting-started-with-oracle-spatial-and-graph-rdf-knowledge-graph-part-3-ce40edc4b1f5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/329128.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优质道路病害数据集汇总

道路病害指的是因使用、环境影响、材料老化等因素引起的道路表面及结构的各种损伤和退化现象。这些病害可能包括裂缝、坑洞、沉陷、脱层、波浪起伏等多种形态。道路病害不仅影响道路的平整性和美观&#xff0c;更重要的是会影响车辆行驶的安全性和舒适性&#xff0c;增加行车风…

day08-Java常用API

day08——Java常用API 一、今日内容介绍、API概述 各位同学&#xff0c;我们前面已经学习了面向对象编程&#xff0c;使用面向编程这个套路&#xff0c;我们需要自己写类&#xff0c;然后创建对象来解决问题。但是在以后的实际开发中&#xff0c;更多的时候&#xff0c;我们是…

MySql--SQL语言

目录 SQl---DDL 结构定义 创建、删除 数据库 代码 运行 设计表 数据类型 整数 浮点数 主键 约束 主键自增长 默认值 字段注释 创建、删除 表 代码 运行 代码 代码 运行 SQL---DML 数据操纵 插入数据 代码 运行 代码 运行 代码 运行 代码 …

使用xsd验证xml格式的正确性

1.1 基础知识介绍 XML简介&#xff1a;XML是可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;的缩写&#xff0c;它是一种数据表示格式&#xff0c;可以描述非常复杂的数据结构&#xff0c;常用于传输和存储数据。xml文件、xml消息。XSD简介&#xff1a;是X…

【linux】详解vim编辑器

基本指令 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 vim的基本概念 vim有很多模式&#xff0c;小编只介绍三种就能让大家玩转vim了&#xff0c; 分别是&#xff1a; 正常/普通/命令模式 插入模式 末行/底行模式 命令模式 控制屏幕光标的…

nssctf(Web刷题)

[SWPUCTF 2021 新生赛]gift_F12 打开题目是一个时间页面&#xff0c;不过看了一会儿发现没有什么用 直接F12打开网页源代码 CtrlF搜索flag 找到了flag NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} [第五空间 2021]签到题 NSSCTF{welcometo5space} [SWPUCTF 2021 新生赛…

【东山派Vision K510开发板试用笔记】nncase的安装

概述 最近试用了百问网提供的东山派Vision开发板&#xff0c;DongshanPI-Vision开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板&#xff0c;主要用于学习使用嘉楠的K510芯片进行Linux项目开发和嵌入式AI应用开发等用途。DongshanPI-Vision开发板采用嘉楠公司…

RedHat9 | 配置转发DNS服务器

一、实验环境 1、介绍 转发服务器&#xff08;Forwarding Server&#xff09;接收查询请求&#xff0c;但不直接提供DNS解析&#xff0c;而是将所有查询请求发送到另外的DNS服务器&#xff0c;将查询的结果返回后保存到缓存中。如果没有指定转发服务器&#xff0c;DNS服务器会…

LSTM实例解析

大家好&#xff0c;这里是七七&#xff0c;今天带给大家的实例解析。以前也用过几次LSTM模型&#xff0c;但由于原理不是很清楚&#xff0c;因此不能清晰地表达出来&#xff0c;这次用LSTM的时候&#xff0c;去自习研究了原理以及代码&#xff0c;来分享给大家此次经历。 一、简…

GPT‑4o普通账户也可以免费用

网址 https://chatgpt.com/ 试了一下&#xff0c;免费的确实显示GPT‑4o的模型&#xff0c;问了一下可以联网&#xff0c;不知道能不能通过插件出图 有兴趣的可以试试

3.6 enum枚举类型

本节必须掌握的知识点&#xff1a; 示例十一 代码分析 汇编解析 3.6.1 示例十一 enum定义枚举类型&#xff0c;它本质是一种整数类型&#xff08;等同int&#xff09;。所谓枚举就是一一列举的意思。在实际应用中&#xff0c;一个星期有七天&#xff0c;一年有十二个月等。如…

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

SpringCloud(1)-Eureka相关配置

1.新建Module-注册中心 作为注册中心 1.1配置 pom.xml <!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency&g…

面向对象-----继承

前面向大家介绍了面向对象中的封装性&#xff0c;今天再来向大家介绍面向对象的继承和多态的两大特性。 1.继承 1.1 为什么需要继承&#xff1f; 在java语言中&#xff0c;我们用类来描述世间万物&#xff0c;虽然万物非常复杂&#xff0c;但总有一些共同点&#xff0c;如果…

【贪心算法题目】

1. 柠檬水找零 这一个题目是一个比较简单的模拟算法&#xff0c;只需要根据手里的钱进行找零即可&#xff0c;对于贪心的这一点&#xff0c;主要是在20元钱找零的情况下&#xff0c;此时会出现两种情况&#xff1a;10 5 的组合 和 5 5 5 的组合&#xff0c;根据找零的特点&a…

网络模型-Qinq配置与应用

Qinq配置与应用 通过配置Qinq来实现利用公网提供的VLAN100使企业1互通&#xff0c;利用公网提供的VLAN200使企业2互通不同企业之间互相隔离。并通过在连接其它厂商设备的接口上配置修改0in0外层VLAN Tag的TPID值&#xff0c;来实现与其它厂商设备的互通。 一、创建VLAN #在Swi…

C - Sigma Problem(AtCoder Beginner Contest 353)

题目的链接: C - Sigma Problem (atcoder.jp) 题目&#xff1a; 样例&#xff1a; 题目大致含意: 给你n个数&#xff0c;让你对这n个数进行操作&#xff0c;比如当前是第i个&#xff0c;那么让a[i] 和 后面的每个数进行相加, 例如a[i] a[i 1] 注意的是a[i] a[i 1]的结果…

Stable Diffusion 3报告

报告链接&#xff1a;Stable Diffusion 3: Research Paper — Stability AI 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 引言 随着人工智能技术的飞速发展&#xff0c;文本到图像生成领域正经…

【map、set】C++用红黑树来封装map、set容器

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解map和set之用红黑树来封装map、set容器的相关内容。 如果看到最后您…

CasaOS系统玩客云安装内网穿透工具实现无公网IP远程访问

文章目录 前言1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 前言 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&am…