- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我偶然发现了另一个问题......
我想实现类似的东西:
我想使用 RDFList 这样做,将必要的属性添加到列表中,然后调用方法 createUnionClass(或 createIntersectionClass)并将它们组合在一起。然后,该方法的结果将通过 addSuperClass() 添加到特定的 ontClass。
这是错的吗?我从一些非常简单的事情开始,比如:
RDFList rdfList = ontModel.createList();
rdfList.addProperty(ExampleResource1);
rdfList.addProperty(ExampleResource2);
UnionClass uc = ontModel.createUnionClass(null, rdfList);
ExampleClass.addSuperClass(uc);
但是结果不是之前说的两者并集的subClassOf,而只是subClassOf nil。
如有任何帮助,我们将不胜感激。
最佳答案
在 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.
您可能还会看到我发布到 Jena 邮件列表的关于类似问题的回复,Re: Owl maxCardinality restriction .
不过,您可以非常接近地使用以下 Java 代码。 3.
是我们希望能够编写的代码,但我们最终不得不使用 3a.
来代替。您可以开始深入研究 RDF 序列化,从而获得真正合格的限制。我已经在相关问题中展示了如何做到这一点:How to add qualified cardinality in JENA .
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.RDFNode;
public class UnionClassExample {
public static void main(String[] args) throws FileNotFoundException, IOException {
String NS = "https://stackoverflow.com/q/20561994/1281433/";
OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
model.setNsPrefix( "so", NS );
OntClass a = model.createClass( NS+"A" );
OntClass b = model.createClass( NS+"B" );
OntClass c = model.createClass( NS+"C" );
OntProperty p = model.createObjectProperty( NS+"p" );
OntProperty q = model.createObjectProperty( NS+"q" );
// 1. B or C
OntClass b_or_c = model.createUnionClass( null, model.createList( new RDFNode[] { b, c } ));
// 2. p only (B or C)
OntClass p_only_b_or_c = model.createAllValuesFromRestriction( null, p, b_or_c );
// 3. q exactly 1 C
// OntClass q_exactly_1_C = model.createCardinalityQRestriction( null, q, 1, c );
// 3a. q exactly 1
OntClass q_exactly_1 = model.createCardinalityRestriction( null, q, 1 );
// (2) and (3a)
OntClass _2_and_3a = model.createIntersectionClass( null, model.createList( new RDFNode[] { p_only_b_or_c, q_exactly_1 } ));
// a subClassOf ((p only (B or C)) and (q exactly 1))
a.addSuperClass( _2_and_3a );
model.write( System.out, "RDF/XML-ABBREV" );
}
}
输出:
<rdf:RDF
xmlns:so="https://stackoverflow.com/q/20561994/1281433/"
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/20561994/1281433/A">
<rdfs:subClassOf>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Restriction>
<owl:allValuesFrom>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="https://stackoverflow.com/q/20561994/1281433/B"/>
<owl:Class rdf:about="https://stackoverflow.com/q/20561994/1281433/C"/>
</owl:unionOf>
</owl:Class>
</owl:allValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="https://stackoverflow.com/q/20561994/1281433/p"/>
</owl:onProperty>
</owl:Restriction>
<owl:Restriction>
<owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>1</owl:cardinality>
<owl:onProperty>
<owl:ObjectProperty rdf:about="https://stackoverflow.com/q/20561994/1281433/q"/>
</owl:onProperty>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</rdfs:subClassOf>
</owl:Class>
</rdf:RDF>
载入 Protégé:
关于java - 添加更复杂的子类公理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561994/
我正在尝试使用基于 this 的 OWLFunctionalSyntaxParser 将字符串解析回 OWL Axioms例子。这对于简单的公理来说效果很好,例如ObjectPropertyAsser
有没有一种方法可以对读取堆并返回与堆无关的快照的函数进行编码?这对于我想开发的实验编码非常有用。 例如,我尝试编写一个名为 edges 的 Dafny 函数,我打算仅将其用于规范。它应该采用一组 No
我正在从 localhost:8080(前端)到 localhost:8000(后端)进行 axios 调用。 前端使用vue、webpack、node编写,后端使用lumen-laravel框架。
各位, 我只是想知道如何使用 AXIOM xml 流程库通过给定标签名称从给定 xml 中删除 xml 元素。 到目前为止我已经成功构建了文档。 StAXOMBuilder builder = new
我使用以下命令在每个传出请求上附加一个值为“Bearer {access_token}”的授权 header :window.axios.defaults.headers.common['Author
我有一个非常大的 ID 数组(数千个 ID)。我想遍历这个数组并为每个值,像这样向 API 发出请求: [12, 32, 657, 1, 67, ...].forEach((id) => {
我在我的 java 项目中遇到这个异常 Caused by: java.lang.ClassNotFoundException: org.apache.axiom.om.OMDataSource
请不要将其标记为重复。我已阅读有关堆栈溢出的所有相关答案,但尚未针对此问题得出明确的解决方案。 我现在正在使用带有 axios 的 vue 服务器来尝试从 https://coinmarketcap.
我对 Vue.js 和 Axios 很陌生。我想学习它来创建一个 REST CRUD 界面。从HTTP GET请求开始,目前我找到的例子都是在页面加载打印返回数据时执行HTTP GET。这很好用。 另
例如 (async() => { let apiRes = null; try { apiRes = await axios.get('https://silex.edgeprop.m
在这个测试用例中,我发送一个带有用户 ID 和密码的 axios post 请求到本地运行 passportjs 的 ExpressJS 服务器。服务器以状态代码 200 响应,并使用 set-coo
我正在尝试从 onesignal api 发送 POST 请求 代码 axios({ method: 'post', url: 'https://onesignal.com/api/v1/no
我是一名优秀的程序员,十分优秀!