【问题标题】:Jena OWL/RDF FunctionalPropertyJena OWL/RDF 功能属性
【发布时间】:2017-04-25 17:57:36
【问题描述】:

我需要实现这样的OWL格式:

<owl:DatatypeProperty rdf:ID="Role-description"> <rdfs:range
rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:domain rdf:resource="#Role"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>

我正在使用 Jena,当我尝试下一步时:

DatatypeProperty datatypeProperty = ontModel.createDatatypeProperty(OWL.NS + "Role-description");
datatypeProperty.addRDFType(OWL.FunctionalProperty);
datatypeProperty.asDatatypeProperty();

反之亦然。

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
  <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Task"/>
  <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Actor"/>
  <owl:ObjectProperty rdf:about="http://www.w3.org/2002/07/owl#Task-performedBy-Actor"/>
  <owl:ObjectProperty rdf:about="http://www.w3.org/2002/07/owl#Actor-performs-Task"/>
  <owl:FunctionalProperty rdf:about="http://www.w3.org/2002/07/owl#Role-description">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
  </owl:FunctionalProperty>
</rdf:RDF>

将不胜感激任何建议

【问题讨论】:

  • 我不明白如何序列化数据很重要。语义应该是相同的,任何适当的解析器都会从中获得相同的完整和正确的信息。 OWL 的序列化没有顺序,因为 OWL 本体由一组 OWL 公理组成
  • @AKSW 我经常看到类似的“需求”,通常是由于过度指定的请求或分配。通常也是与非 RDF 或非 OWL 工具链交互的结果。

标签: java rdf jena owl


【解决方案1】:

你得到的输出不是反之亦然。您基本上拥有的是具有多种类型的 RDF 资源。如何对它们进行序列化取决于 Jena(即认为哪个是“主要的”)。为了说明,我会将您的示例序列化为 Turtle(稍作修改以使用自定义命名空间):

@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix roles: <http://example.com/ns/roles#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .

roles:Role-description
        a       owl:DatatypeProperty , owl:FunctionalProperty .

现在,您可以操作类型的顺序以方便序列化:

public static final String ROLES_NS = "http://example.com/ns/roles#";

public static void main(String[] args) {
    OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
    ontModel.setNsPrefix("roles", ROLES_NS);

    DatatypeProperty prop = ontModel.createDatatypeProperty(
            ROLES_NS + "Role-description");
    prop.setRDFType(OWL.FunctionalProperty);
    prop.addRDFType(OWL.DatatypeProperty);

    RDFDataMgr.write(System.out, ontModel, RDFFormat.RDFXML_PRETTY);
}

它产生以下输出:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:roles="http://example.com/ns/roles#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
  <owl:DatatypeProperty rdf:about="http://example.com/ns/roles#Role-description">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
  </owl:DatatypeProperty>
</rdf:RDF>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-27
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多