在中间节点上带有断言的属性链

如何解决在中间节点上带有断言的属性链

我有一个用例,我试图推断特定用户是否对资源具有管理员访问权限。我正在使用 GraphDB。

我的本​​体包含用户、角色、权限和资源。一个用户可以有 N 个角色。每个角色都有不同的权限,其中之一是管理权限。每个角色适用于特定的资源。

所以我试图推断的是一个直接关系,表明用户对资源具有管理员访问权限。我正在尝试使 PropertyChains 和 rolification 适合我的用例,但我并没有完全使它起作用。我不确定这是否是正确的道路。

在这里起草了这个本体:

@prefix :      <https://stackoverflow.com/myQuestion#> .
@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 rdf:   <http://www.w3.org/1999/02/22-rdf-Syntax-ns#> .

<https://stackoverflow.com/myQuestion>
        a       owl:Ontology .
    
:hasRole  a           owl:ObjectProperty ;
        rdfs:domain  :User ;
        rdfs:range   :Role .

:roleHasPermission  a           owl:ObjectProperty ;
        rdfs:domain             :Role ;
        rdfs:range              :Permission ;

:appliesToResource  a           owl:ObjectProperty ;
        rdfs:domain  :Role ;
        rdfs:range   :Resource .

:userHasAdminPermission a       owl:ObjectProperty ;
        rdfs:domain  :User ;
        rdfs:range   :Resource .

:User   a     owl:Class .

:Role   a     owl:Class .

:Permission a owl:Class .

:Resource a   owl:Class .

:AdminPermission a :Permission . 
:OtherPermission a :Permission .

解决方法

使用 owl:propertyChainAxiom 可以实现这一点,但需要在与特定资源 (:AdminPermission) 相关的数据中引入独特的“节点特定循环”并在目标链中使用它.

棘手的部分是这种“循环”的产生。一种方法可以通过组合使用逆属性和具有两个 owl:hasValue 类型限制的相互作用来实现,以便在特定目标节点周围派生这些限制。

让我们引入一个类 :AdminRole 作为这些的占位符:

@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 rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:roleHasAdminPermission owl:inverseOf :adminPermissionAppliesToRole .

:AdminRole rdfs:subClassOf :Role;
    owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty :roleHasPermission;
    owl:hasValue :AdminPermission 
    ];
    owl:equivalentClass [
    a owl:Restriction ;
    owl:onProperty :roleHasAdminPermission;
    owl:hasValue :AdminPermission 
    ] .

:userHasAdminPermission owl:propertyChainAxiom 
   (:hasRole :roleHasPermission :adminPermissionAppliesToRole :appliesToResource) .

每当一个节点与 :roleHasPermission:AdminPermission 相关时,它成为 :AdminRole 的成员,并且 :AdminRole 的每个成员必须分别与 :roleHasAdminPermission 相关联:AdminPermission

接下来,将 :adminPermissionAppliesToRole 作为 :roleHasAdminPermission 的倒数引入,从而创建我们所追求的循环。

剩下的就是通过该循环定义 owl:propertyChainAxiom 以导出用户和资源之间的 :userHasAdminPermission

检查一些示例数据(使用 owl2-rl 推理):

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 rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

insert data {
    :Administrator a :Role ;
        :roleHasPermission :AdminPermission .

    :Administrator :appliesToResource :Archive .

    :Clerk a :Role ;
        :roleHasPermission :OtherPermission .

    :Clerk :appliesToResource :SomethingOther .
    
    :Ron a :User;
        :hasRole :Administrator .

    :Jane a :User;
        :hasRole :Clerk .
}

以及要检查的示例查询:

describe :Ron

将显示: :Ron :userHasAdminPermission :Archive

HTH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?