当前位置: 首页 > 知识库问答 >
问题:

使用OWL API获取本体中两个对象的属性值交集

岳俊晖
2023-03-14
----------------------------------------------------------------------------------------  
 Class                Object       (Data Property)StringValue  ObjectProperty relatedTo    
----------------------------------------------------------------------------------------  
 WordString             WS1                    "One"                   DS1
                        WS2                    "Two"                   DS2
                        WS3                    "Three"                 DS3

 DigiString             DS1                    "1"  
                        DS2                    "2"  
                        DS3                    "3"  
----------------------------------------------------------------------------

完整本体如下:-

<rdf:RDF xmlns="http://localhost:3030/DigiWord.owl#"
 xml:base="http://localhost:3030/DigiWord.owl"
 xmlns:DigiWord="http://localhost:3030/DigiWord.owl#"
 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
 xmlns:owl="http://www.w3.org/2002/07/owl#"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://localhost:3030/DigiWord.owl"/>
<!-- 
// Object Properties
///////////////////////////////////////////////////////////////////////////////////////
 -->
<!-- http://localhost:3030/DigiWord.owl#relatedTo -->
<owl:ObjectProperty rdf:about="&DigiWord;relatedTo">
    <rdfs:domain rdf:resource="&DigiWord;DigiString"/>
    <rdfs:range rdf:resource="&DigiWord;WordString"/>
</owl:ObjectProperty>
<!-- 
//
// Data properties
///////////////////////////////////////////////////////////////////////////////////////
 -->
<!-- http://localhost:3030/DigiWord.owl#stringValue -->

<owl:DatatypeProperty rdf:about="&DigiWord;stringValue">
    <rdfs:domain rdf:resource="&DigiWord;DigiString"/>
    <rdfs:domain rdf:resource="&DigiWord;WordString"/>
    <rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<!-- 
// Classes
///////////////////////////////////////////////////////////////////////////////////////
 -->
<!-- http://localhost:3030/DigiWord.owl#DigiString -->
<owl:Class rdf:about="&DigiWord;DigiString"/>
<!-- http://localhost:3030/DigiWord.owl#WordString -->
<owl:Class rdf:about="&DigiWord;WordString"/>
<!-- 
// Individuals
///////////////////////////////////////////////////////////////////////////////////////
 -->
<!-- http://localhost:3030/DigiWord.owl#DS1 -->
<owl:NamedIndividual rdf:about="&DigiWord;DS1">
    <rdf:type rdf:resource="&DigiWord;DigiString"/>
    <stringValue rdf:datatype="&xsd;string">1</stringValue>
    <relatedTo rdf:resource="&DigiWord;WS1"/>
</owl:NamedIndividual>
<!-- http://localhost:3030/DigiWord.owl#DS2 -->
<owl:NamedIndividual rdf:about="&DigiWord;DS2">
    <rdf:type rdf:resource="&DigiWord;DigiString"/>
    <stringValue rdf:datatype="&xsd;string">2</stringValue>
    <relatedTo rdf:resource="&DigiWord;WS2"/>
</owl:NamedIndividual>
<!-- http://localhost:3030/DigiWord.owl#DS3 -->
<owl:NamedIndividual rdf:about="&DigiWord;DS3">
    <rdf:type rdf:resource="&DigiWord;DigiString"/>
    <stringValue rdf:datatype="&xsd;string"></stringValue>
    <relatedTo rdf:resource="&DigiWord;WS3"/>
</owl:NamedIndividual>
<!-- http://localhost:3030/DigiWord.owl#WS1 -->
<owl:NamedIndividual rdf:about="&DigiWord;WS1">
    <rdf:type rdf:resource="&DigiWord;WordString"/>
    <stringValue rdf:datatype="&xsd;string">One</stringValue>
</owl:NamedIndividual>
<!-- http://localhost:3030/DigiWord.owl#WS2 -->
<owl:NamedIndividual rdf:about="&DigiWord;WS2">
    <rdf:type rdf:resource="&DigiWord;WordString"/>
    <stringValue rdf:datatype="&xsd;string">Two</stringValue>
</owl:NamedIndividual>
<!-- http://localhost:3030/DigiWord.owl#WS3 -->
<owl:NamedIndividual rdf:about="&DigiWord;WS3">
    <rdf:type rdf:resource="&DigiWord;WordString"/>
    <stringValue rdf:datatype="&xsd;string">Three</stringValue>
</owl:NamedIndividual>
</rdf:RDF>

我想为DS1检索对象WS1,为DS2检索对象WS2,即在提供字符串“1”、“2”等时,我的代码应该分别检索“1”、“2”。我在网上没有遇到过任何这类的相关代码,如果有任何帮助,我将不胜感激。提前道谢。

共有1个答案

仇浩旷
2023-03-14
    OWLOntology o = ... your ontology here
    String ns = "http://localhost:3030/DigiWord.owl#";
    OWLDataFactory df = o.getOWLOntologyManager().getOWLDataFactory();
    OWLObjectProperty relatedto = df.getOWLObjectProperty(IRI.create(ns + "relatedTo"));
    OWLDataProperty stringValue = df.getOWLDataProperty(IRI.create(ns + "stringValue"));
    SimpleRenderer renderer = new SimpleRenderer();
    for (OWLNamedIndividual i : o.getIndividualsInSignature()) {
        for (OWLLiteral lit : EntitySearcher.getDataPropertyValues(i, stringValue, o)) {
            System.out.println(i + " has values " + renderer.render(lit));
        }
        for (OWLIndividual related : EntitySearcher.getObjectPropertyValues(i, relatedto, o)) {
            for (OWLLiteral lit : EntitySearcher.getDataPropertyValues(related, stringValue, o)) {
                System.out.println(i + " related to " + related + " which has values " + renderer.render(lit));
            }
        }
    }
    for (OWLNamedIndividual i : o.getIndividualsInSignature()) {
        for (OWLIndividual related : EntitySearcher.getObjectPropertyValues(i, relatedto, o)) {
            for (OWLLiteral lit : EntitySearcher.getDataPropertyValues(related, stringValue, o)) {
                if(lit.getLexicalForm().equals("1")){
                    for (OWLLiteral lit : EntitySearcher.getDataPropertyValues(i, stringValue, o)) {
                        System.out.println(i + " has values " + renderer.render(lit));
                    }
                }
            }
        }
    }
 类似资料:
  • 我有一个本体,是使用Protegé4.3.0创建的,我将使用OWL-API为指定的个体和对象属性表达式获取对象属性值(即一组对象)。

  • 问题内容: 这个问题很简单,但是由于我是python的新手,所以我从php过来了,因此遇到了一些错误。 我有以下简单的课程: 在PHP中,我可以执行以下操作: 我该如何在python中做到这一点? 问题答案: 要访问对象的字段或方法,请使用dot : 如果将在运行时定义字段名称,请使用内置函数:

  • 在 PowerShell 中,如何通过指定对象的名称(字符串)来获取对象的属性值?我想要类似这样的东西: 是否有类似于“获取属性名称”的内容?

  • 我有一个包含如下值的对象 这些都在变量autossuggest中。现在我只想获得值 谢谢你的小费

  • 所以我做了两组物体,就像这样。 这些都是4位数的对象,所以它就像。。。 如果我有2个集合,set1和set2,我想更新set1和set2,只包含set1具有与set2的第一个属性匹配的最后一个属性的对象。 例如第1组中的1234将与第2组中的3456匹配。 我可以很容易地将其作为列表而不是集合来完成,但如果我能够理解过程,集合会感觉效率更高,但不确定如何返回对象属性的交集。任何帮助。 编辑:因为我

  • 问题内容: 基本上,我有一个带有的表单,用于选择要使用的数据集(值分别为“ m”,“ f”和“ c”)。然后,我有一个字典/对象,其数据位于: 现在我需要/ / 但我不知道如何使用语法-我已经试过: 什么是正确的语法/方法? 问题答案: 由于您是通过变量引用属性,因此需要使用括号表示法。 …这与您传递字符串时使用的表示法相同。