代码之家  ›  专栏  ›  技术社区  ›  Aaron Novstrup

将Jena OntModels与bnode同步

  •  1
  • Aaron Novstrup  · 技术社区  · 17 年前

    这个问题涉及 rcreswick 的问题 Serializing Jena OntModel Changes

    问题 :我在这方面走对了吗,还是有一种更好、更稳健的方法是我没有考虑的?

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

    这里有一个例子来进一步支持这一讨论。假设我在机器a上有一个列表,表示为:

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

    
        _: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 rdf:first myns:tom
        _:b rdf:rest _:c
        _:c rdf:first myns:dick
        _:c rdf:rest rdf:nil
    

    1 回复  |  直到 9 年前
        1
  •  1
  •   Dilum Ranatunga    17 年前

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

    然而,无论是否为空节点,双向同步都只能让你走到这一步。如果你试图在两个模型上检测到等效的并发更改,这样的策略只能让你走到这一步。

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

    address and zip
    phone number
    appointment dateTime
    

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

    推荐文章