在以下代码中,ValidityReport始终有效;没有检测到不一致。我希望它能给我一个警告,因为我给FOAF文件一个姓氏。为什么没有检测到不一致?
Model model = ModelFactory.createDefaultModel();
OntModel m = ModelFactory.createOntologyModel();
m.read(FOAF.NS);
Resource persona = model.createResource("http://www.example.org/rdf#Persona", FOAF.Document);
persona.addProperty(FOAF.family_name, "18", XSDDatatype.XSDint);
InfModel infModel = ModelFactory.createRDFSModel(m, model);
ValidityReport validity = infModel.validate();
if (validity.isValid()) {
System.out.println("Valid!");
} else {
System.out.println("Conflicts");
for (Iterator<Report> in = validity.getReports(); in.hasNext();) {
System.out.println(" - " + in.next());
}
}
答案 0 :(得分:2)
您正在创建的实例数据是:
@prefix ex: <http://www.example.org/rdf#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:Persona a foaf:Document ;
foaf:family_name "18"^^xsd:int .
有foaf:Document
类型的资源,xsd:int
属性的值为foaf:family_name
。
您的推理模型使用RDFS推理器。 foaf:family_name
的域名(顺便说一句,被描述为foaf:familyName
的古老拼写)是foaf:Person
,因此ex:Persona
可以推断为foaf:Person
1}},正如我们所看到的那样,我们是否编写了推理模型。还推断出ex:Persona
还有许多其他类型:
ex:Persona a foaf:Document , foaf:Person , <http://www.w3.org/2000/01/rdf-schema#Resource> , <http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing> , foaf:Agent ;
foaf:family_name "18"^^xsd:int .
在RDFS模型中存在不一致性是相当困难的,因为你无法真正说出很多。例如,你不能声明不相交的类,所以在foaf:Document
和 a foaf:Person
之间没有矛盾。
即使您使用OWL推理器,您仍然需要查明某些特定的逻辑不一致性。我不知道ex:Persona
中有哪些类型是不相交的,如果它们不是(或者如果推理器不能推断它们是这样),那么你就不会发现不一致。