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_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云下到云上,丽迅物流如何实现数据库降本50% | OceanBase案例

在2024年3月20日的首场OceanBase数据库城市行活动中&#xff0c;专注于物流及供应链解决方案的丽迅物流的架构师阳磊&#xff0c;围绕“OB Cloud在丽迅物流的实践”这一主题&#xff0c;进行了精彩的演讲。本文为此次演讲的内容回顾。 在丽迅物流&#xff08;Lesoon Logistics…

论文精读-SRFormer Permuted Self-Attention for Single Image Super-Resolution

论文精读-SRFormer: Permuted Self-Attention for Single Image Super-Resolution SRFormer:用于单图像超分辨率的排列自注意 Params&#xff1a;853K&#xff0c;MACs&#xff1a;236G 优点&#xff1a; 1、参考SwinIR的RSTB提出了新的网络块结构PAB&#xff08;排列自注意力…

盘点28个免费域名申请大全

盘点28个免费域名申请大全 免费域名推荐学习使用&#xff0c;免费就意味着没任何保障。 名称稳定时间支持解析模式后缀格式说明地址EU.org28 年NS.eu.org/. 国家简写.eu.org需要审核&#xff0c;稳定性高&#xff0c;限制少&#xff0c;国内访问有问题&#xff0c;可 CFeu.orgp…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege" Dog dog = new Do…

10个最佳Android数据恢复工具,用于恢复已删除的文件

由于我们现在在智能手机上存储了许多重要文件&#xff0c;因此了解数据恢复工具变得很重要。您永远不会知道何时需要使用适用于Android的数据恢复工具。 由于不乏Windows数据恢复工具&#xff0c;因此从崩溃的计算机中恢复文件很容易。但是&#xff0c;当涉及到从Android恢复数…

adb卸载系统垃圾应用

//获取包名 输入如下代码&#xff0c;然后在打开和关闭要获取包名的app就会打印出该app的包名 adb shell am monitor //卸载系统应用 -k会保留用户数据&#xff0c;不包含-k则不会保留用户数据 adb shell pm uninstall -k --user 0 包名 &#xff08;包名一般为&#xff1a;c…

机械臂与Realsense D435 相机的手眼标定ROS包

本教程主要介绍机械臂与 Realsense D435 相机手眼标定的配置及方法。 系统&#xff1a;Ubuntu 20.0.4 ◼ ROS&#xff1a;Noetic ◼ OpenCV 库&#xff1a;OpenCV 4.2.0 ◼ Realsense D435&#xff1a;librealsense sdk&#xff08;2.50.0&#xff09;、realsense-ros 功能包&…

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

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

资料防拷贝该如何实现?数据防拷贝的方法有哪些

数据安全和隐私保护成为企业和个人关注的重点。电脑中存储的资料往往包含了重要的商业机密、个人隐私或其他敏感信息。 因此&#xff0c;如何有效防止他人非法拷贝电脑资料&#xff0c;成为了一个亟待解决的问题。 本文将探讨数据防拷贝的方法&#xff0c;以帮助企业和个人保护…

22-LINUX--多线程and多进程TCP连接

一.TCP连接基础知识 1.套接字 所谓套接字(Socket)&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲&#xff0c;套接字上联应用进程…

Map遍历、反射、GC

map的遍历 用foreach遍历 HashMap<Character,Integer> map new HashMap<>();map.put(A,2);map.put(B,3);map.put(C,3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key entry.getKey();int value entry.getValue();System.out.prin…

CF451E: Devu and Flowers(容斥原理 + 考虑反面 + golang组合模版)

题目截图 题目翻译 题目分析 正难则反&#xff0c;考虑所有不符合的例子 由于n很小&#xff0c;所以可以状态压缩二进制遍历完全部不符合例子的组合 对于不符合的例子&#xff0c;假设其中第i个不符合&#xff0c;那么就消耗掉fi 1个球 以此类推&#xff0c;减剩下s2个球 这时…

Android正向开发实现客户端证书认证

前言 如果第三方模块被混淆,那hook方式均不能生效。这时就需要根据系统包去定位校验的函数,因此需要对安卓开发者是如何实现客户端证书校验的有一定了解,接下来就介绍这部分内容。 开发者实现客户端证书校验的本质是:证书/密钥 + 代码。 在形式上有:证书校验、公钥校验和…

Anthropic绘制出了大型语言模型的思维图:大型语言模型到底是如何工作

今天&#xff0c;我们报告了在理解人工智能模型的内部运作方面取得的重大进展。我们已经确定了如何在 Claude Sonnet&#xff08;我们部署的大型语言模型之一&#xff09;中表示数百万个概念。这是对现代生产级大型语言模型的首次详细了解。这种可解释性的发现将来可以帮助我们…

Hadoop 客户端 FileSystem加载过程

如何使用hadoop客户端 public class testCreate {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME", "hdfs");String pathStr "/home/hdp/shanshajia";Path path new Path(pathStr);Confi…

AWS安全性身份和合规性之Artifact

AWS Artifact是对您很重要的与合规性相关的信息的首选中央资源。AWS Artifact是一项服务&#xff0c;提供了一系列用于安全合规的文档、报告和资源&#xff0c;以帮助用户满足其合规性和监管要求。它允许按需访问来自AWS和在AWS Marketplace上销售产品的ISV的安全性和合规性报告…

当他们在说业务的时候,到底在说什么

业务就是通过提供产品和服务给客户&#xff0c;以获取某种价值&#xff0c;形成业务闭环&#xff0c;并能自负盈亏。 文章会以生动形象的比喻来介绍业务到底是什么。 什么是业务&#xff1f; 业务&#xff0c;就像一场精彩的舞台剧&#xff0c;每个角色都有自己的任务和目标…

PHP生成二维码+二维码包含logo图片展示

composer require chillerlan/php-qrcode 用到的扩展自己安装&#xff08;注&#xff1a;只生成二维码只要开gd扩展就行&#xff09; 仅生成二维码看这个&#xff1a; use chillerlan\QRCode\QRCode;public function QRCode(){$qrcode new QRCode();$url "http://ww…

新建项目上传gitee

1.在项目根目录下打开黑窗口执行初始化 git init2.复制码云上新建仓库地址 3.本地仓库和远程仓库建立连接 远程仓库地址是之前复制的仓库地址&#xff0c;复制后直接在命令窗口中鼠标右键Paste即可在命令窗口粘贴出来 git remote add origin 远程仓库地址4.每次上传之前先更…

工厂模式(简单工厂模式+工厂模式)

工厂模式的目的就是将对象的创建过程隐藏起来&#xff0c;从而达到很高的灵活性&#xff0c;工厂模式分为三类&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 在没有工厂模式的时候就是&#xff0c;客户需要一辆马车&#xff0c;需要客户亲自去创建一辆马车&#xff0c;…