V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kaiz
V2EX  ›  程序员

在线文档的批注位置信息如何存储到数据库?

  •  1
     
  •   kaiz · 195 天前 · 1908 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如图所示,左边是用户的文档,右边是针对文档一部分文字的批注,请问批注的位置信息在数据库中怎么存储合适?

    批注类似于类似于 pdf / Google doc / 腾讯文档的批注,其它用户可以对文档中一个片段写下评语。

    我的问题是:用户的文档是会持续更新的,导致批注的位置信息随时都在变化,因此我不知道在数据库中应该如何存储批注的位置信息。

    假设我存储批注对应文字 行+列,一旦某处文档有增减,必须调整后面所有批注的位置,我感觉这样开销会很大吧?

    假设我存储批注对应的文字部分,那批注对应的文字也可能删减/变化。

    不知道有没有更高效的方法存储批注的位置,这个需求在腾讯文档等在线文档编辑器里应当很普遍。

    16 条回复    2023-10-17 16:26:02 +08:00
    sillydaddy
        1
    sillydaddy  
       195 天前 via Android
    对,感觉这应该是一个很普遍的需求。我的想法是把文档拆分成小段,比如每个小段用一个 id 标识。整个文章就是小段按顺序组合成的。小段的定义,可以根据文档的特点来确定,比如可以使用自然段落,也可以定义一段就是 100 个字。

    修改文字的话,找到修改的对应小段,然后用相对位置表示修改的内容,比如第 5 小段的第 8 个字到第 10 个字替换为 xxxxx 。在这个范围内的标注也要更新。
    Li83Xi7Gai4
        2
    Li83Xi7Gai4  
       195 天前
    想一想 git 是怎么存提交记录的
    zhangxh1023
        3
    zhangxh1023  
       195 天前
    存标签?瞎猜的想法,比如存:
    <!批注>这是<!批注>一段<!批注: 两个字儿的批注>文本<!批注: 文本的批注 xxxxx>
    aijam
        4
    aijam  
       195 天前   ❤️ 1
    文本存成这个形式:
    some text <comment id="xxxx">highlight text</comment> more text.
    comment 数据库正常存 id -> comment 内容
    jinliming2
        5
    jinliming2  
       195 天前 via iPhone   ❤️ 1
    有没有一种可能,批注不是单独存的,而是直接嵌入在文章里的?只不过在展示的时候抽取到右边而已?
    比如参考某些论坛的语法可以这样表示:
    [加粗]加粗文案[/加粗][批注:批注内容]批注文案[/批注]
    llllllllyyyyyy
        6
    llllllllyyyyyy  
       195 天前
    @zhangxh1023 感觉靠谱
    jucelin
        7
    jucelin  
       195 天前
    如果做的粗一点:每次修改都是新的,没批注的。批注是上个版次的,毕竟批注和内容直接相关的
    justdoit123
        8
    justdoit123  
       195 天前
    感觉 @aijam 的思路干净一点。
    GTim
        9
    GTim  
       195 天前
    @aijam 我做过,用的就是这种方案,而且是特殊字符 {$#c:评注 id $#c}评论的内容{#$#c}
    root71370
        10
    root71370  
       195 天前
    @aijam 是的
    BurNIng1988
        11
    BurNIng1988  
       194 天前
    @aijam 嵌套的评论你们是设计成什么样的,把小段拆分吗?
    isSamle
        12
    isSamle  
       194 天前
    你可以试下用 WPS 把 Word 转 html ,你会发现 doc 的批注就是类标签,每标注一小段就是给这段字加前后标签
    cdswyda
        13
    cdswyda  
       194 天前
    @aijam #4 , 批注原文可能会交叉,这个怎么处理呀。 我看腾讯文档、飞书文档都能正确支持的。
    aijam
        14
    aijam  
       194 天前
    @cdswyda 那 end tag 也要加 id ,那就不符合 xml 标准。为防误导,可以自定义一种格式。比如
    {start_comment:123}some highligted text{end_comment:123}
    之类的
    fwh
        15
    fwh  
       194 天前
    w3c 有一个 web 注释模型标准 https://www.w3.org/TR/annotation-model/
    这里有个开源的 js 实现 https://github.com/recogito/recogito-js
    hedwi
        16
    hedwi  
       193 天前
    这种可以看一下 word 的结构 按照 word 的存储方式就行 找个 word 解析库看下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5394 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 05:52 · PVG 13:52 · LAX 22:52 · JFK 01:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.