首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在jena的对象属性断言中添加注释吗?

我可以在jena的对象属性断言中添加注释吗?
EN

Stack Overflow用户
提问于 2013-09-14 11:46:57
回答 1查看 2K关注 0票数 0

我想向对象属性断言添加一个注释(注释),如下所示。

移动hasCamera→→8MP

我能够作为一个Statement对象获得这个特定的断言。现在,我想向这个语句对象添加注释,但是没有任何直接的方法可以用Jena来实现这一点。另一方面,我可以很容易地实现这一点,在蛋白酶工具。那么,这仅仅是Protégé的一个特点,还是有什么方法可以让耶拿做到这一点呢?

基本上,我感兴趣的是,在两个资源之间的属性(链接)中添加一个权重分数,即。移动和8MP。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-14 13:14:25

Jena虽然通过OntModels对OWL提供了一些支持,但实际上是一个基于RDF的API。Jena中的语句只是一个代表三元组的类,而本身并不代表一个资源。如果要创建带注释的对象属性断言,则需要从第2.3节带注释的公理的翻译中查看OWL2Web本体语言映射到RDF图。具体来说,看起来2.3.1生成主三元组的公理就是您想要的:

如果表1中对应于ax‘类型的行包含一个主三元组p,则axiom被转换为以下三元组: S p. xlt ._:x rdf:类型owl:Axiom。_:x owl:注释源的_:x owl:注释属性p。_:x owl:注释目标xlt。Annotation1,_:x.TANN(注解,_:x) 如果ax‘是…类型,情况就是这样ObjectPropertyAssertion…。

引用的表1出现在前面的2.1无注释公理的翻译部分中。

所以,把三重加起来

代码语言:javascript
复制
Mobile hasCamera 8MP

用注解

代码语言:javascript
复制
hasWeightScore 6.7

您可以使用以下代码:

代码语言:javascript
复制
import com.hp.hpl.jena.ontology.AnnotationProperty;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.ObjectProperty;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.OWL2;

public class AnnotatedAxioms {
    public static void main(String[] args) {
        final String ns = "http://example.org/";
        final OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_DL_MEM );
        model.setNsPrefix( "ex", ns );

        final Individual mobile = model.createIndividual( ns+"Mobile", OWL.Thing );
        final ObjectProperty hasCamera  = model.createObjectProperty( ns+"hasCamera" );
        final Individual eightMP = model.createIndividual( ns+"8MP", OWL.Thing );

        final AnnotationProperty hasWeightScore = model.createAnnotationProperty( ns+"hasWeightScore" );

        final Resource axiom = model.createResource( OWL2.Axiom );
        axiom.addProperty( OWL2.annotatedSource, mobile );
        axiom.addProperty( OWL2.annotatedProperty, hasCamera );
        axiom.addProperty( OWL2.annotatedTarget, eightMP );
        axiom.addLiteral( hasWeightScore, 6.7 );

        model.write( System.out, "RDF/XML-ABBREV" );
    }
}

它产生以下本体:

代码语言:javascript
复制
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:ex="http://example.org/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:ObjectProperty rdf:about="http://example.org/hasCamera"/>
  <owl:AnnotationProperty rdf:about="http://example.org/hasWeightScore"/>
  <owl:Axiom>
    <ex:hasWeightScore rdf:datatype="http://www.w3.org/2001/XMLSchema#double"
    >6.7</ex:hasWeightScore>
    <owl:annotatedTarget>
      <owl:Thing rdf:about="http://example.org/8MP"/>
    </owl:annotatedTarget>
    <owl:annotatedProperty rdf:resource="http://example.org/hasCamera"/>
    <owl:annotatedSource>
      <owl:Thing rdf:about="http://example.org/Mobile"/>
    </owl:annotatedSource>
  </owl:Axiom>
</rdf:RDF>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18801414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档