【问题标题】:Synchronizing Jena OntModels with bnodes将 Jena OntModel 与 bnode 同步
【发布时间】:2010-10-18 03:59:58
【问题描述】:

这个问题与rcreswickSerializing Jena OntModel Changes 上的问题有关。我在需要通过套接字保持同步的两台(或更多)机器上有 Jena 模型。我需要解决的主要问题是模型可能包含匿名节点(bnodes),它可以源自任何模型。

问题:我是否走在正确的轨道上,或者有没有更好、更强大的方法我没有考虑?

我可以想到 3 种方法来解决这个问题:

  1. 序列化完整模型:这对于同步小更新来说非常昂贵。另外,由于任何一台机器都可能发生变化,我不能只用机器 A 的序列化模型替换机器 B 的模型。我需要将它们合并。
  2. 序列化部分模型:使用专用模型进行序列化,该模型仅包含需要通过套接字发送的更改。这种方法需要特殊的词汇来表示从模型中删除的语句。据推测,当我将模型从机器 A 序列化到机器 B 时,匿名节点 ID 对于机器 A 将是唯一的,但可能与在机器 B 上创建的匿名节点的 ID 重叠。因此,我必须重命名匿名节点并保留映射从机器 A 的匿名 ID 到机器 B 的 ID,以便正确处理未来的更改。
  3. 对单个语句进行序列化:这种方法不需要特殊的词汇,但可能不那么可靠。除了匿名节点之外,还有没有我还没有遇到过的问题?
  4. 生成全局唯一的 bnode ids (NEW):我们可以通过在 ID 前加上唯一的机器 ID 来为匿名节点生成全局唯一的 ID。不幸的是,我还没有想出how to tell Jena to use my ID generator 而不是它自己的。这将允许我们在不重新映射 bnode ID 的情况下序列化单个语句。

这里有一个例子可以让这个讨论更深入一点。假设我在机器 A 上有一个列表,表示为:


    _:a rdf:first myns:tom
    _:a rdf:rest rdf:nil

我将此模型从机器 A 序列化到机器 B。现在,由于机器 B 可能已经有一个(不相关的)匿名节点,id 为“a”,我将 id 'a' 重新映射到新的 id 'b':


    _:b rdf:first myns:tom
    _:b rdf:rest rdf:nil

现在机器 A 上的列表发生了变化:


    _:a rdf:first myns:tom
    _:a rdf:rest _:b
    _:b rdf:first myns:dick
    _:b rdf:rest rdf:nil

由于机器 B 之前从未遇到过机器 A 的 id 'b',它添加了一个从机器 A 的 id 'b' 到新的 id 'c' 的新映射:


    _:b rdf:first myns:tom
    _:b rdf:rest _:c
    _:c rdf:first myns:dick
    _:c rdf:rest rdf:nil

如果有两台以上的机器,问题会更加复杂。例如,如果有第三台机器 C,它可能有自己的匿名节点“a”,它不同于机器 A 的匿名节点“a”。因此,机器 B 确实需要保存从其他机器的每个匿名节点 ID 到其本地 ID 的映射,而不仅仅是从一般的远程 ID 到本地 ID。在处理传入的更改时,它必须考虑更改的来源以正确映射 ID。

【问题讨论】:

    标签: java serialization jena ontology


    【解决方案1】:

    您可以将自己的三元组添加到模型中吗?如果是这样,我将为每个 bnode 引入一个语句,以 URN 的形式为每个 bnode 提供一个备用公共 id。您现在可以开始在两个模型之间匹配 bnode。

    无论是否为空白节点,双向同步只能让您到目前为止。如果您尝试在两个模型上检测等效的并发更改,那么像这样的策略只会让您到目前为止。

    这是一个例子。假设您正在创办一家新的草坪护理公司。为了招揽生意,你和你的伴侣去当地的户外活动,并尝试预订一些打折的试用预约。你们两个,每个人都带着一台笔记本电脑,把任何有兴趣的人打成一片并记录下来。记录有:

    address and zip
    phone number
    appointment dateTime
    

    假设每条记录都作为资源存储在您的模型中。你有可能见到丈夫,你的伴侣有可能见到同一家庭的妻子。无论您是否巧合地预订了相同的约会日期时间,系统都很难对条目进行重复数据删除。无论您对每条记录使用 bnode 还是使用基于 UUID 的 URI,它都不会重复数据删除。唯一的希望是,如果您使用某种规范形式的电话号码来合成记录的确定性 URI。

    【讨论】:

    • 感谢您的回复!我们通过将每台机器限制在本体的特定部分来处理这个同构问题。回到您的示例,A 人可能在客户列表上工作,而 B 人负责管理库存。我们的域还为相关实体提供了明确定义的唯一 ID。问题是 A 可以向客户端列表中添加一个列表节点,该列表节点恰好与肥料供应商列表中的 bnode id 重叠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多