如何在JENA中添加合格的基数

Mic*_*iak 4 java rdf owl jena description-logic

如何在耶拿添加合格的基数限制?我不能使用,createCardinalityQRestriction因为它OntModelSpec是OWL的第一个版本,而不是OWL2.在ModelFactory的createOntologyModel中,有没有办法创建OWL2本体?我需要一个类表达式

JeVysledkom 正好 1 Kolik_Fazovy

我试过使用这段代码:

OntModel ontModel = ModelFactory.createOntologyModel();
OntClass ret = ontModel.createCardinalityQRestriction(null, ontProperty, cardinality,    ontClass2 );
ontClass.addSuperClass(ret);
Run Code Online (Sandbox Code Playgroud)

但我得到这个例外:

com.hp.hpl.jena.ontology.ProfileException:尝试使用当前语言配置文件不支持的语言构造CARDINALITY_Q:OWL Full

Jos*_*lor 5

我实际上只是遇到了另一个问题,添加更复杂的子类公理.在Jena中创建它有点棘手,因为对合格基数限制的支持是OWL2功能,而Jena对OWL2的支持有限:

Jena Ontology API

请注意,目前,Jena本体API仅对OWL2的合格基数限制(即cardinalityQ,minCardinalityQ和maxCardinalityQ)提供有限的支持.合格的基数限制封装在接口CardinalityQRestriction,MinCardinalityQRestriction和CardinalityQRestriction中.OntModel还提供了创建和访问合格基数限制的方法.由于它们不是OWL 1.0语言定义的一部分,因此OWL本体不支持合格的基数限制.OWL 2更新中添加了合格的基数限制.Jena的OWL2支持将在适当时候添加.

另外,OWL2词汇表Javadoc说:

OWL2词汇.注意:Jena不提供OWL2推理或OntModel支持.提供这些常量是为了方便正在使用当前OWL1支持进行OWL2工作并希望获得一组合适名称的用户.

您可能还会看到我在Jena邮件列表中发布的关于类似问题的回复,Re:Owl maxCardinality限制.

但是你想创建一个呢?那么你就是其中一个"正在使用当前OWL1支持并且需要一组合适名称的OWL2工作的用户."为了找出如何在RDF中序列化OWL2结构,我们需要看看OWL 2 Web本体语言映射到RDF图(第二版),特别是第2从结构规范映射到RDF图,它告诉我们类表达式

ObjectExactCardinality( n OPE CE )
Run Code Online (Sandbox Code Playgroud)

被序列化为以下三元组

_:x rdf:type owl:Restriction .
_:x owl:onProperty T(OPE) .
_:x owl:qualifiedCardinality "n"^^xsd:nonNegativeInteger .
_:x owl:onClass T(CE) .
Run Code Online (Sandbox Code Playgroud)

哪个_:x是类的资源.耶拿已经处理过的不合格案件就转了

ObjectExactCardinality( n OPE )
Run Code Online (Sandbox Code Playgroud)

_:x rdf:type owl:Restriction .
_:x owl:onProperty T(OPE) .
_:x owl:cardinality "n"^^xsd:nonNegativeInteger .
Run Code Online (Sandbox Code Playgroud)

如果我们有后者之一,我们可以用owl:cardinality属性替换它的owl:qualifiedCardinality属性,并添加适当的owl:onClass属性.这里有一些Java代码可以做到这一点:

import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntProperty;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.vocabulary.OWL;
import com.hp.hpl.jena.vocabulary.OWL2;

public class QualifiedRestrictionExample {
    public static OntClass createCardinalityQRestriction(
            OntModel model,
            String uri,
            Property prop,
            int cardinality, 
            OntClass clas ) {
        OntClass klass = model.createCardinalityRestriction( uri, prop, cardinality );
        klass.removeAll( OWL.cardinality );
        klass.addLiteral( OWL2.qualifiedCardinality, cardinality );
        klass.addProperty( OWL2.onClass, clas );
        return klass;
    }

    public static void main(String[] args) {
        String NS = "https://stackoverflow.com/q/20562107/1281433/";
        OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_DL_MEM );
        OntClass test = model.createClass( NS+"Test" );
        OntProperty j = model.createObjectProperty( NS+"JeVysledkom" );
        OntClass k = model.createClass( NS+"Kolik_Fazovy" );
        OntClass x = createCardinalityQRestriction(model, null, j, 1, k);
        test.addSuperClass( x );
        model.write( System.out, "RDF/XML-ABBREV" );
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
  <owl:Class rdf:about="https://stackoverflow.com/q/20562107/1281433/Kolik_Fazovy"/>
  <owl:Class rdf:about="https://stackoverflow.com/q/20562107/1281433/Test">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onClass rdf:resource="https://stackoverflow.com/q/20562107/1281433/Kolik_Fazovy"/>
        <owl:qualifiedCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#long"
        >1</owl:qualifiedCardinality>
        <owl:onProperty>
          <owl:ObjectProperty rdf:about="https://stackoverflow.com/q/20562107/1281433/JeVysledkom"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)

在Protégé:

Protege中的子类公理