onenote链接系列⑭:内置对象ID,内链的核心

原创 小斯  2020-12-07 18:23 

本系列前面的文章已经将onenote内部链接、外部链接相关知识点都梳理了一遍,对于理解onenote链接基本够用了。但鉴于对象ID属性的重要性,可以再进行一些深入探讨。

ID作为唯一的身份标识符,无论是在网络世界还是现实世界,都起着重要作用。原因很简单,你想和某个对象沟通,最基本的前提是找到这个对象,并确定他就是他,而不是其他。如何做到?通过ID。

1

onenote中的对象ID是什么?

分区、页面和段落的链接地址中都带上了ID属性。这个ID,据我的理解,其实就是一个GUID即全局唯一标识符,具体细节可参考此文:

COM-组件对象模型,与GUID-全局唯一标识符

GUID可以理解为全宇宙唯一的值(按规定算法生成两个相同GUID的可能性极小极小,概率上虽不是0,但可以当做0),onenote中新建分区、页面或段落时都会为对象即时赋予一个GUID,这就确保了onenote中的这些对象全部是宇宙间独一无二的,通过GUID就能找到对应的对象,不用担心找错。

2

直接用ID定位对象

当对象的链接地址中带上ID值后,链接的稳定性大大增加。

有了ID值,要在onenote中找分区、页面或段落,可以直接用ID进行准确定位,丝毫不用考虑外部文件(夹)路径的变化。

还是用之前的“小斯想段落”段落地址举例,完整地址是:

onenote://D:/小斯想笔记本/小斯想分区组/小斯想分区.one#小斯想页面&section-id={F3786832-BC35-45D6-97A4-98B7F4A025F6}&page-id={CE390548-D979-459D-9DA0-FE19F992E473}&object-id={C2CCD78A-85F8-4239-BA40-DA1A2EFF9A60}&21

自定义内部链接地址时,根本无需写这么复杂。

例如,通过onenote://section-id={F3786832-BC35-45D6-97A4-98B7F4A025F6},可以直接定位至“小斯想分区”;通过onenote://page-id={CE390548-D979-459D-9DA0-FE19F992E473}可以直接定位至“小斯想页面”。

不过,定位至具体段落时似乎有所不同,测试结果是:object-id前面必须得带上页面ID,后面必须带上&21(位置索引号,不同位置的索引号不同,缺了它只能定位至页面,不能具体至段落),这样才能准确定位至段落,例如通过onenote://page-id={CE390548-D979-459D-9DA0-FE19F992E473}&object-id={C2CCD78A-85F8-4239-BA40-DA1A2EFF9A60}&21,可以准确定位至“小斯想段落”。至于段落ID定位为何要搞得如此复杂,尚不理解其底层逻辑。

3

ID何时有效,何时失效?

本来应该结合onenote对象的生命周期来谈这个问题,但缺乏官方的权威参考资料,就不瞎猜了。在这里,还是结合我的实际使用体验总结链接地址中ID的有效性,目前来说,最重要的结论有两个:

对象所在的笔记本必须处于打开状态,地址中的ID才有效。所谓打开,指的是笔记本必须位于onenote的“笔记本窗格”(NotebookRoot)下。

移动对象,ID不变;剪切后粘贴对象,建立的是对象的副本,拥有全新ID,而原ID对应的对象可以理解为已销毁(分区和页面对象会在回收站保留一段时间再销毁,段落对象会直接销毁),原ID失效。所以,如果你链接了某个内部对象,可以移动调整其位置,但如果剪切或删除了,对应链接中的ID部分就会失效。

ID部分还有些可以深入的细节,但不想继续往下了。已经总结的这些,足够建立链接管理体系了。所以,底层理论探索部分,先到此为止了。

本文地址:http://cas01.com/6894.html
关注我们:请关注一下我们的微信公众号:扫描二维码小斯想的公众号,公众号:cas01
温馨提示:本站发布的压缩包如需密码解压,若无特别说明,密码统一为:cas01.com
版权声明:本文为原创文章,版权归 小斯 所有,欢迎分享本文,转载请保留出处!

发表评论


表情