我正在使用Jena框架来操作RDF文件,但是我找不到一种方法来使用您各自的RDFSchema来验证RDF。我正在尝试下面的方法:
Model mod1 = new ModelMem();
Model modSchema = new ModelMem();
String baseURI = "http://iec.ch/TC57/2007/network";
String rdfPath = "file:D:\\modelo.rdf";
InputStream model = FileManager.get().open(rdfPath);
String rdfPathSchema = "file:D:\\Schema.rdf";
InputStream modelSchema = FileManager.get().open(rdfPathSchema);
mod1.read(model, baseURI, "RDF/XML-ABBREV");
modSchema.read(modelSchema,baseURI, "RDF/XML-ABBREV");
InfModel infmodel = ModelFactory.createRDFSModel(mod1, modSchema);
ValidityReport validity = infmodel.validate();
return validity.isValid();但它总是返回true。
发布于 2012-10-27 01:19:43
我找到了用RDF模式验证RDF的解决方案。存在一个名为CIMValidation的工具。我们可以在应用程序java中使用它,只需将.jar添加到buildpath并使用RDFSValidator类即可。谢谢你所有的回答。
发布于 2012-10-20 02:01:40
您确定仅仅因为您尝试的所有输入都是有效的,它就不会总是返回true吗?您是否尝试过创建相对于模式显式无效的输入,并对其进行了测试?
尽管RDF Schema不像XML schema那样是严格的模式,但您可能想看看Jena Eyeball,这是另一个基于Jena的工具,用于检查RDF,但不确定它是否能完成您想要的工作。
如果您仍然有问题,请尝试询问Jena邮件列表- users@jena.apache.org
编辑
请注意,只有在以与模式不一致的方式使用某些内容时,验证才会返回false。创建您可能认为无效的数据的输入错误和其他用户错误可能仍然与RDF模式完全一致。
例如,假设您有一个简单的RDF模式,如下所示:
:ValidType a rdfs:Class .
:property a rdf:Property ;
rdfs:domain :ValidType .因此,此模式声明您有一个类和一个属性,该属性具有该类的域。
然后,用户输入错误,并在其数据中包含以下内容:
:subj a :InvalidType .这本身并不矛盾,因为RDF有一个开放世界的假设。声明某些内容的类型不在您的RDF模式中并不会导致验证失败,从验证的角度来看,这只是虚假信息。
但是,如果用户随后声明:subj使用了您定义的属性,则如下所示:
:subj a :InvalidType ;
:property "value" .现在验证应该返回false,因为数据将与模式不一致,您声明:property只有域:ValidType,但它与:InvalidType类型的资源一起使用,因此这是不一致的,验证应该失败。
发布于 2012-10-22 08:17:43
严格来说,通过Jena或RDFS并不是一个解决方案,但是关于Pellet's ICV capabilities (移植到Stardog,描述为here)的信息可能会有用。但正如Rob所说,这真的归结为开放世界与封闭世界的事情,这使得它有点棘手。
https://stackoverflow.com/questions/12979797
复制相似问题