【问题标题】:Reading restriction constraints using Jena使用 Jena 读取限制约束
【发布时间】:2012-05-23 06:25:54
【问题描述】:

我有一些对象限制,例如

hasVendor some Vendor
hasYear some integer[minLength 2, maxLength 4, >=1995, <=2012]
hasPrice only string[pattern "/^[0-9]+(\.[0-9]{2})?$/"]

其中 Vendor 是一个类。我按照此链接中的说明:https://stackoverflow.com/a/7805455/1138148 阅读了限制。我需要使用 Jena 从每个这些限制中获取约束值。在第一种情况下,我能够将'Vendor' 作为约束,但是对于第 2 和第 3 种情况,我得到了一些类似垃圾的值,例如:

7cbf42c2:137784f42b4:-7d1f7cbf42c2:137784f42b4:-7d29 分别。这些价值观是什么?如何检索模式本身以及值 minLength、1995 等。

【问题讨论】:

    标签: java jena owl protege4


    【解决方案1】:

    这些是这些限制中中间节点的 bnode 标识符。结果数据中的“东西”比以曼彻斯特语法序列化时显示的要多得多。您需要查看 w3c 上的 OWL to RDF mappings document 以了解更多关于这是如何发生的。

    我不建议自己进行验证。如果你打算在 OWL 中表示这些东西,你可以使用推理器来告诉你什么时候违反了限制。这在大多数情况下都会起作用,但是在开放世界与封闭世界之间存在一些陷阱,您需要注意这些陷阱才能真正做到这一点。您还可以查看 Integrity Constraint Validation as offered by Pellet 之类的内容,它可以让您在 OWL 中编写约束并将封闭世界语义应用于它们,从而提供更自然的(特别是如果您来自 RDBMS 世界)使用它们的方式.

    但是,如果您必须手动处理这些限制,您将需要更深入地研究限制的底层 RDF 结构以获取您正在寻找的位,或者使用实际设计的 API使用 OWL,例如 OWLAPI

    【讨论】:

    • 谢谢。我是 OWL 和 Jena 的新手。因此,如果我有一组令牌,我如何将推理器应用于它并检查每个令牌是否违反限制。请给出代码示例。
    • 我不知道你所说的令牌是什么意思。如果您将本体与数据一起放入推理器中,推理器会告诉您数据是否与本体一致。也就是说,您的限制或其他公理之一是否被违反。我强烈建议您阅读 OWL 入门书,了解开放世界推理的含义,以便您更好地了解这些东西的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多