【问题标题】:How to validate a RDF with your RDF schema如何使用您的 RDF 模式验证 RDF
【发布时间】:2012-10-19 17:55:06
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: validation rdf jena rdfs


    【解决方案1】:

    您确定它并不总是仅仅因为您尝试的所有输入都是有效的而返回 true 吗?您是否尝试过创建相对于架构明确无效的输入并对其进行测试?

    不管 RDF Schema 不是 XML Schema 那样的严格模式,你可能想看看 Jena Eyeball 这是另一个基于 Jena 的 RDF 检查工具,但不确定它是否能满足你的要求.

    如果您仍有问题,请尝试在 Jena 邮件列表中询问 - users@jena.apache.org

    编辑

    请注意,只有当您以与架构不一致的方式使用某些东西时,验证才会返回 false。创建您可能认为无效的数据的拼写错误和其他用户错误可能仍然与 RDF Schema 完全一致。

    例如,假设您有一个简单的 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 类型的资源一起使用,因此这是不一致的,验证应该失败。

    【讨论】:

    • 嗨 RobV,即使我输入了一个错误名称的资源,例如验证返回 true,它也总是返回 true。
    • 在耶拿,我们必须创建具有定义类型的资源。当我说“错误名称”时,实际上我想说的是类型名称与 RDFSchema 中类型的名称不同。在这种情况下,rdf 验证应该返回 false。
    • 请查看我的扩展答案,希望能解决您的评论
    • 不幸的是没有。我的问题是:我有一个这样的架构: ... 如果我创建一个节点在我的文件 rdf 中使用“Swtich”写错了,验证方法必须返回 false。但这永远不会发生。
    • 正如我在上面的回答中所解释的,只是拼写“Switch”错误不会使您的数据无效,它只会使其超出您的架构。似乎您假设 RDF Schema 的功能与 XML Schema 相同,因为它是一个严格的验证 - 相信我不会!
    【解决方案2】:

    严格来说,不是通过 Jena 或通过 RDFS 的解决方案,但有关 Pellet's ICV capabilities(移植到 Stardog,描述为 here)的信息可能有用。但正如 Rob 所说,这真的归结为开放与封闭世界的事情,这有点棘手。

    【讨论】:

      【解决方案3】:

      我找到了使用 RDF Schema 验证 RDF 的解决方案。 存在一个名为 CIMValidation 的工具。我们可以在应用程序java中使用它, 只需将 .jar 添加到构建路径并使用 RDFSValidator 类。 谢谢大家的回答。

      【讨论】:

      • 感谢您提供这个可能有用的库。到目前为止,我的印象是,将 XML 世界留在 RDF 中,我失去了任何类型的模式定义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多