- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如何在 Jena 中添加限定基数限制?我无法使用 createCardinalityQRestriction
,因为 OntModelSpec
适用于 OWL 的第一个版本,而不是 OWL2。在ModelFactory的createOntologyModel中,有没有办法创建OWL2本体?我需要一个像
JeVysledkom exactly 1 Kolik_Fazovy
我试过使用这段代码:
OntModel ontModel = ModelFactory.createOntologyModel();
OntClass ret = ontModel.createCardinalityQRestriction(null, ontProperty, cardinality, ontClass2 );
ontClass.addSuperClass(ret);
但我得到了这个异常(exception):
com.hp.hpl.jena.ontology.ProfileException: Attempted to use language construct CARDINALITY_Q that is not supported in the current language profile: OWL Full
最佳答案
我实际上只是在处理另一个问题时遇到了这个问题,Adding more complicated subclass axiom .在 Jena 中创建这个有点棘手,因为支持限定基数限制是 OWL2 的一个特性,而 Jena 对 OWL2 的支持有限:
Jena Ontology API
Note that, at present, the Jena ontology API has only limited support for OWL2's qualified cardinality restrictions (i.e. cardinalityQ, minCardinalityQ and maxCardinalityQ). Qualified cardinality restrictions are encapsulated in the interfaces CardinalityQRestriction, MinCardinalityQRestriction and CardinalityQRestriction. OntModel also provides methods for creating and accessing qualified cardinality restrictions. Since they are not part of the OWL 1.0 language definition, qualified cardinality restrictions are not supported in OWL ontologies. Qualified cardinality restrictions were added to the OWL 2 update. OWL2 support in Jena will be added in due course.
另外,Javadoc for the OWL2 vocabulary class说:
OWL2 vocabulary. NOTE: Jena does not provide OWL2 inference or OntModel support. These constants are provided for the convenience of users who are doing OWL2 work with the current OWL1 support and desire a suitable set of names.
您可能还会看到我发布到 Jena 邮件列表的关于类似问题的回复,Re: Owl maxCardinality restriction .
但是你还是想创建一个?那么你就是那些“在当前 OWL1 支持下使用 OWL2 并需要一组合适的名称的用户”中的一员。要找出 OWL2 构造应该如何在 RDF 中序列化,我们需要看一下 OWL 2 Web Ontology Language Mapping to RDF Graphs (Second Edition)。 ,特别是第 2 Mapping from the Structural Specification to RDF Graphs 节, 它告诉我们类表达式
ObjectExactCardinality( n OPE CE )
被序列化为下面的三元组
_:x rdf:type owl:Restriction .
_:x owl:onProperty T(OPE) .
_:x owl:qualifiedCardinality "n"^^xsd:nonNegativeInteger .
_:x owl:onClass T(CE) .
其中 _:x
是作为类的资源。耶拿已经处理的不合格案件转
ObjectExactCardinality( n OPE )
进入
_:x rdf:type owl:Restriction .
_:x owl:onProperty T(OPE) .
_:x owl:cardinality "n"^^xsd:nonNegativeInteger .
如果我们有后者之一,我们可以用 owl:qualifiedCardinality
属性替换它的 owl:cardinality
属性,并添加适当的 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" );
}
}
输出:
<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>
在 Protégé 中:
关于java - 如何在 JENA 中添加限定基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562107/
在 Haskell 中,我可以导入由其名称或快捷方式名称限定的模块,如下所示: import qualified Data.List as List import qualified Data.Map
我在头文件中有以下函数声明: extern void flash(const char *message, const enum msg_type type); 基本上,它有两个参数并将相应的消息推送
我遇到了一个我似乎无法理解的小问题。 我正在我的数据库中搜索一个用户一个月内收到的评论总数,然后绘制成图表。 我遇到的问题是在我的 SQL 语句中使用 MONTHNAME 如果我使用 $this->d
根据 this answer , 常量不应该被删除,因为它们可能一开始就没有分配。但是,在某些情况下我想保护动态分配的数据。例如,在管理用户 session 时†,我想确保像当前用户名这样的数据不会被
我正在处理一个大型 C++ 项目。我有一堆在项目的子集中使用的宏,但我不想将它们导出到任何地方,以避免污染不相关的代码。 现在,我的许多文件看起来像 #include // defines MACR
谁能解释为什么代码无法编译。 template struct Base { T a; Base(const T argB) : a(argB){} }; template struct Der
我正在阅读 C++-Primer(作者:Josée Lajoie 和 Stanley B. Lippman),这时我看到了有关顶级和低级 const 的部分。在一段中,它说当复制对象时,顶级 cons
我有一大块 CSS,我想将其“作用域”到特定的 HTML block 。我正在生成一个唯一的 ID,然后将其设置在 HTML block 上,然后想用相同的 ID 包装 CSS block ,以便这些
我正在尝试为接受三个参数的函数创建一个通用接口(interface)。填写第一个参数时,第二个参数的选项应该在第一个参数的范围内。第三个参数应该在第二个参数的范围内。 我当前的代码如下所示: type
似乎 C++11 和 C++14 对待纯右值的 cv 限定不同。 C++11 坚持自 C++98 以来一直存在的“经典”方法:根据 3.10/4 “非类纯右值始终具有 cv 非限定类型”。 C++14
这个问题在这里已经有了答案: Stripping all qualifiers from a function type (1 个回答) 关闭去年。 我想编写一个模板,它接受一个指向成员函数的指针(
有时在引用同一类(或基类)的其他实例成员的实例成员中阅读代码可能会造成混淆: public void MyMethod() { Where = did + AllTheseWeirdThing
因此,在使用 constexpr 时,MSVC (Visual Studio 2012) 在尝试使用这个简单的程序(包括省略)使用 constexpr 关键字限定我的函数时给了我一个错误: const
这是我的 html(在 Twig 模板中) {{folder.name}} 我正在尝试从“data-jstree”获取“type”的值。 我试过用 var node_id = ref.get_node
当我尝试编译以下函数时出现错误。 string& foo(){ return "Hello World"; } Error: 1 IntelliSense: a reference of type
我有以下情况: 一个函数创建一个字符串数组,然后将其传递给一堆其他函数。这些其他函数不应修改外部指针指向的指针或字符串本身,因此我将它们设为常量。 最小的例子: void function(const
我希望能够限定 XHTML 文档中的 KnockOutJS 属性。 这是我想做的: My name is:
我正在浏览 Programming with Objective-C Apple 提供的文档。 我正在尝试理解以下段落,但到目前为止,无法理解。 @protocol XYZPieChartViewDa
给定两个 cv-unqualified 非数组对象类型 T1和 T2 , 可以表达 true ? std::declval() : std::declval()曾经有过 cv 限定的数组或函数类型吗?
我是一名优秀的程序员,十分优秀!