我在图形数据库中对特定案例建模时遇到问题。它与Facebook中的@mentions非常相似,所以我希望至少有一个很好的解决方案。
实施例: 我有三个节点,每个节点包含一个法律文本中的段落。我们假设:
现在我希望如果读取节点1(=§1),则会向用户显示超级节点2(§2)和节点3(§3)。虽然关系本身很容易建模
(§2)LT - [REFERS_TO] - (§1) - [REFERS_TO] - GT;(§3)
,我很难“指出”与某个文本元素的关系,即字符“§2” - >节点2和“§3” - >节点3。
怎么可以解决这个问题? 我曾考虑用ID替换文本元素,这些ID也存储在关系中,
§1:“Lorem Ipsum 1 ...请参阅{@IDXXX}和{@IDYYY}以获取更多信息”
(§2)LT - [REFERS_TO {ID = “IDXXX”,LABEL = “§2”}] - (§1) - [REFERS_TO {ID = “IDYYY”,LABEL = “§3”}] - >(§3)
但我担心使用ID太“静态”,并且可能会导致更改节点1及其关系内容的问题。
感谢您的投入。
答案 0 :(得分:1)
如果段落始终具有相同的标签(暂时忽略标签随时间的变化),则无论引用它的位置如何,label
属性都属于段落节点,而不是关系(这将是浪费的重复信息)。同样,这样,如果引用的段落标签需要更改,则只需要在一个地方完成 - 并且最明显的地方。
我没有看到任何标签" id"的原因。并且我没有看到引用段落发生更改的问题 - 它可以根据需要添加,替换或删除与其他段落的关系。
答案 1 :(得分:1)
听起来您想要模拟本质上嵌入的超链接。我认为使用关系将基节点链接到被引用节点的想法也是一个好主意。
我建议在关系中存储起始位置和停止位置属性。这些应该表示包含关系的节点文本中的引用应该开始和停止的位置。如果它真的只是一个脚注类型参考,你可以只使用起始位置。
是的,每当您更新文本时,您都必须更新位置,但这不应该难以管理,无论您如何实施解决方案,都必须处理这些问题。