Firefox书签SQLite结构

Tob*_*lls 14 sqlite bookmarks firefox-addon firefox-3

我正在尝试编写一个Firefox 3附加组件,这将使我能够轻松地重新标记书签.例如,我有一些书签标记为"开发",一些标记为"开发",我想要一种方法轻松地将所有"delelopment"标签更新为"开发".不幸的是我找不到这样做的附加组件,所以我想我会创建自己的.

在我设法掌握基础知识并发现FireFox将所有书签存储在名为Places.sqlite的SQLite数据库之前,尚未开发附加组件.在该数据库中有一个名为moz_bookmarks的表,其中包含书签目录中的所有书签,标签和文件夹.书签文件夹及其子书签的结构使用外键id表示,该外键id指向同一表中父文件夹的id,该表再次向上递归到该父文件夹的Id,直到它到达书签根.

但是,我遇到困难的地方是你在firefox中应用的标签与书签有关.每个标记都有一个type = 2和parent ID = 4.但是我可以看到它与使用该标记的实际书签之间没有相关性.如果我在firefox中添加一个书签到没有特定的文件夹,但给它2或3个标签,那么它的父文件夹ID是5,它对应于"未归档",但我看不到与其关联的标签的进一步关联.

在结构上找到了这个Wiki页面,但它并没有真正帮助.

这让我疯狂:(请帮忙...

Mar*_*ner 27

您可能已经发现了自己,但标签应用如下:

数据库中所有URL的中心位置是moz_places.该表moz_bookmarks通过外键列引用它fk.

如果您标记书签,则有多个条目moz_bookmarks,所有条目都具有相同的引用fk:第一个是书签本身(在title列中具有标题)对于每个标记,还有一个额外的委托moz_bookmarks具有相同的外键fk并引用parentcoumn 中的标记(指向moz_bookmarks标记的行).

如果你有一个名为'Stackoverflow' 的书签' http://stackoverflow.com ',标签'编程'和'信息',你会得到:

moz_places
----------
id    url   (some more)
3636  http://stackoverflow.com

moz_bookmarks
-------------
id    type    fk     parent    title          (other columns omitted...)
332   1       3636   5         Stackoverflow  (parent=5 -> unfiled folder)
333   2       (NULL) 4         programming    (programming tag, parent=4 -> tags folder)
334   1       3636   333       (NULL)         (link to 'programming' tag)
335   2       (NULL) 4         info           (info tag, parent=4 see above)
336   1       3636   335       (NULL)         (link to 'info' tag)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...


Edd*_*e B 5

正如 MartinStettner 建议的标签结构基于标签 id 的外键,因此您首先必须确定目标标签的 moz_bookmark.id。

这个 Mozilla PDF解释了 sqllite 中的关系......

标签会在 moz_bookmarks 中产生两个新条目。第一个是标签,parent=4(标签),fk=NULL。第二个条目跟在第一个条目之后,前一个标签作为它的父元素,fk 指向 moz_places 中的正确条目。

使用它作为指导......一旦你知道标签的id,你就可以加入moz_places.id ON moz_bookmarks.fk ...

    SELECT moz_places.id, moz_places.url, moz_places.title, moz_bookmarks.parent    
    FROM moz_places    
    LEFT OUTER JOIN moz_bookmarks    
    ON moz_places.id = moz_bookmarks.fk    
    WHERE moz_bookmarks.parent = N
Run Code Online (Sandbox Code Playgroud)

出口 ...