问题描述
我在使用 Apache Jena 创建 NodeShape 时遇到问题。 我想定义一个针对属于 owl:Class 的所有命名个体的形状(因此不包括空白节点)。 例如,这种形状将有助于评估一个本体的所有类是否至少有一个标签。
我定义了这个形状
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix os: <https://w3id.org/OWLunit/shapes/ontology.ttl#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-Syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
os:ClassShape
a sh:NodeShape ;
sh:target [
a sh:SPARQLTarget ;
sh:select """
PREFIX owl: <http://www.w3.org/2002/07/owl#>
SELECT ?this
WHERE {
?this a owl:Class .
FILTER(!isBlank(?this))
}
""" ;
] ;
sh:property [
sh:path rdfs:label ;
sh:minCount 1 ;
] .
并且,按照 here 提供的说明,我编写了以下代码来评估 DUL ontology 上的形状。
public static void test() {
String SHAPES = "test_shape.ttl";
String DATA = "http://www.ontologydesignpatterns.org/ont/dul/DUL.owl";
String q = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#> "
+ "SELECT ?this WHERE {"
+ " ?this a owl:Class . FILTER NOT EXISTS {?this rdfs:label ?l}"
+ "FILTER (!isBlank(?this))}";
Graph shapesGraph = RDFDataMgr.loadGraph(SHAPES);
Graph dataGraph = RDFDataMgr.loadGraph(DATA,Lang.RDFXML);
System.out.println(ResultSetFormatter
.asText(QueryExecutionFactory.create(q,ModelFactory.createModelForgraph(dataGraph)).execSelect()));
Shapes shapes = Shapes.parse(shapesGraph);
System.out.println("Number of shapes " + shapes.getTargetShapes().size());
ValidationReport report = ShaclValidator.get().validate(shapes,dataGraph);
System.out.println(report.conforms());
ShLib.printReport(report);
}
--------------------------------------------------------------------------------
| this |
================================================================================
| <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#DesignedSubstance> |
| <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#TimeIndexedRelation> |
| <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#ObjectAggregate> |
| <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#SpatioTemporalRegion> |
| <http://www.w3.org/2002/07/owl#Thing> |
| <http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#informationEntity> |
--------------------------------------------------------------------------------
Number of shapes 0
true
Conforms
注意本体中定义的6个类没有标签(查询q打印它们),因此本体不符合形状。 未加载任何形状,因此 DUL 结果符合形状。
这里出了点问题。是形状原因还是代码原因?
PS:我使用的是 apache-jena 4.0.0
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)