Oracle Graph 入门 - RDF 知识图谱

news2024/11/15 4:33:05

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_tblspace
 DATAFILE 'rdf_tblspace.dat' SIZE 10240M REUSE
 AUTOEXTEND ON NEXT 256M MAXSIZE UNLIMITED
 SEGMENT 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.coloradmin.cn/o/1695993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】计算机组成原理(八)

CPU 的结构和功能 文章目录 CPU 的结构和功能8.1 CPU的结构8.1.1 CPU的功能8.1.2 CPU结构框图8.1.3 CPU的寄存器8.1.4 控制单元CU和中断系统 8.2 指令周期8.2.1 指令周期的基本概念8.2.2 指令周期的数据流 8.3 指令流水8.3.1 指令流水原理8.3.2 影响流水线性能的因素8.3.3 流水…

从0开始带你成为Kafka消息中间件高手---第二讲

从0开始带你成为Kafka消息中间件高手—第二讲 那么在消费数据的时候&#xff0c;需要从磁盘文件里读取数据后通过网络发送出去&#xff0c;这个时候怎么提升性能呢&#xff1f; 首先就是利用了page cache技术&#xff0c;之前说过&#xff0c;kafka写入数据到磁盘文件的时候&…

深入探索:中文字符的编码与转移字符的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;探索字符编码的世界 二、字符编码基础&#xff1a;理解ASCII与Unicode…

面向未来AI算力中心的电能消耗及优化策略

AI苏妲己&#xff1a;面向未来AI算力中心的电能消耗及优化策略 在人工智能&#xff08;AI&#xff09;和大模型技术加速发展的今天&#xff0c;智算中心对电力需求爆发式递增。如何降低这些中心的能耗成本&#xff0c;关于电能消耗趋势、新能源发电、以及源网荷储一体化解决方…

高级卫生专技资格考试报名流程及照片尺寸审核处理指南

高级卫生专业技术资格考试是卫生专业技术人员职业发展的重要环节&#xff0c;它不仅关系到个人职称的提升&#xff08;副高、正高职称&#xff09;&#xff0c;也是对其专业能力和水平的权威认证。随着考试季的临近&#xff0c;许多考生开始关注报名流程及照片尺寸审核处理等细…

代码随想录算法训练营第36期DAY39

道心破碎的一天&#xff0c;继续加油吧&#xff0c;坚持努力。 DAY39 738单调递增的数字 暴力法&#xff1a; 没有想到用int in;i>0;i--来遍历。 class Solution {private: bool checknum(int num){ if(num<10) return true; while(num/10!0){ …

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…

C++ Primer Plus第十八章复习题

1、使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv&#xff0c;zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出&#xff1a;一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景&#xff1a;防抖、节流 2.1防抖 举…

Mysql教程(0):学习框架

1、Mysql简介 MySQL 是一个开放源代码的、免费的关系型数据库管理系统。在 Web 开发领域&#xff0c;MySQL 是最流行、使用最广泛的关系数据库。MySql 分为社区版和商业版&#xff0c;社区版完全免费&#xff0c;并且几乎能满足全部的使用场景。由于 MySQL 是开源的&#xff0…

【Windows】 IDimager Photo Supreme 2024(图片管理软件)安装教程

软件介绍 IDimager Photo Supreme 2024是一款专业的图片管理软件&#xff0c;旨在帮助用户有效地组织、管理和浏览他们的照片收藏。以下是该软件的一些主要特点和功能&#xff1a; 图片管理&#xff1a;Photo Supreme提供强大的图片管理功能&#xff0c;可以帮助用户轻松地整理…

笔记89:LeetCode_135_分发糖果

前言&#xff1a; 注&#xff1a;代码随想录中没有很清楚的提起想出方法的思路&#xff0c;只是给出了解决这个问题的大致思路和代码&#xff1b;下面我将介绍一下我的思考过程&#xff0c;并贴出实现代码&#xff1b; a a a a 思考过程&#xff1a; 思路1&#xff1a;为了…

Win32 API

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏 : C语言 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 一.Win32 API 1.Win32 API介绍 Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是…

【408真题】2009-15

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

nginx服务器执行的过程

一:打包 1.打包前的分析 文件路径下npm run preview -- --report 生成打包之后的内容 2.解决有些内容体积过大的问题 1.删除有些不使用但是占用较多的,将main.js上import删除,打包时不会有 2.不能删除但是内容较大的 vue.config.js文件夹下 externals: { vue: Vue,…

mysql5.5版本安装过程

mysql是关系型数据库的管理系统 将安装包放在 c盘根目录 名称为mysql 在该路径下cmd进入命令执行窗口 出现此页面说明安装成功 需要修改配置文件内容 将my-medium.ini 复制粘贴并改名为 my.ini 并添加如下内容 改好之后在mysql目录下cmd进入命令执行窗口 切换到cd bin …

[集群聊天服务器]----(一)项目简介

在最近的学习中&#xff0c;实现了基于muduo网络库的集群聊天服务器&#xff0c;在此做一个剖析以及相关内容的梳理介绍&#xff0c;希望可以帮助到大家。 这一篇&#xff0c;先来简单介绍一下这个项目。 源码地址 Cluster_Chat_System-项目 项目技术特点 使用C开发并基于 …

ASP+ACCESS公司门户网站建设

【摘 要】随着计算机科学的发展&#xff0c;数据库技术在Internet中的应用越来越广泛&#xff0c;为广大网络用户提供了更加周到和人性化的服务。本文讲解了一个公司的网站的建设&#xff0c;它基于数据关联规则的公司个性化页面及动态数据生成案例&#xff0c;在网页方面&…

Linux--线程的认识(一)

线程的概念 线程&#xff08;Thread&#xff09;是操作系统中进行程序执行的最小单位&#xff0c;也是程序调度和分派的基本单位。它通常被包含在进程之中&#xff0c;是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战&#xff1a;高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章&#xff1a;简介 1.1 Django简介 Django是一…