自己动手制作MySQL Internals Manual For Dash文档[亲测有效]

自己动手制作MySQL Internals Manual For Dash文档[亲测有效]老实说,我刚用Dash没几天,感觉还不错,毕竟有份本地化文档还是比较方便,不用总实时打开MySQL官档网页。不过,目前Dash只有MySQL 5.5 ~ 8.0的官档,没有其他相关文档,有时候想查看…

自己动手制作MySQL Internals Manual For Dash文档

1. 准备工作

1.1 下载MySQL文档

用wget批量、自动下载Internals Manual及MySQL 8.0 Release Notes文档。

 

代码100分

  1. [root@yejr.me]# cd /data/mysql-docs

  2.  

  3. [root@yejr.me]# wget -r -p -np -k --no-check-certificat "https://dev.mysql.com/doc/internals/en/index.html"

  4.  

  5. [root@yejr.me]# wget -r -p -np -k --no-check-certificat "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/"

  6.  

  7. [root@yejr.me]# ls -l dev.mysql.com

  8. drwxr-xr-x 3 root root 16Feb2913:25 internals

  9. drwxr-xr-x 3 root root 19Feb2922:19 relnotes

1.2 构建Python环境

制作Dash docset文档,需要用到Python的beautifulsoup4模块,因此要先安装上。安装beautifulsoup4模块挺简单的,用Python的pip就可以了,如果不知道的话,可以先自行搜索一番。

代码100分 
  1. [root@yejr.me]# pip install beautifulsoup4

此外,还需要sqlite数据库,如果没有的话,也先自行安装,用yum就可以了,也挺方便的。

2. 构建Dash docset环境

2.1 创建docset目录结构,复制文件

 
  1. [root@yejr.me]# cd /data/mysql-docs/dev.mysql.com/doc/internals/

  2.  

  3. # 以MySQL Internal Manual文档为例,先创建下面的目录

  4. [root@yejr.me]# mkdir -p MySQL_Internal.docset/Contents/Resources/Documents/

  5.  

  6. # 复制所有文件到docset目录下

  7. [root@yejr.me]# cp en/* MySQL_Internal.docset/Contents/Resources/Documents/

2.2 编辑Info.plist文件

接下来就是要编辑Info.plist文件了,这也是docset的metadata文件了,存储基本信息,以及定义一些配置等。

代码100分 
  1. [root@yejr.me]# cat MySQL_Internal.docset/Contents/Info.plist

  2. <?xml version="1.0" encoding="UTF-8"?>

  3. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd">

  4. <plist version="1.0">

  5. <dict>

  6. <key>CFBundleIdentifier</key>

  7. <string>MySQLInternalManual</string>

  8. <key>CFBundleName</key>

  9. <string>MySQLInternalManual</string>

  10. <key>DocSetPlatformFamily</key>

  11. <string>MySQLInternalManual</string>

  12. <key>dashIndexFilePath</key>

  13. <string>index.html</string>

  14. <key>isDashDocset</key>

  15. <true/>

  16. </dict>

  17. </plist>

2.3 生成docset文档索引

Dash的文档索引采用SQLite数据库,SQLite是一个很小巧的、开源的关系型数据库,据说很可能是使用量最大的关系数据库。

先创建docset索引表:

 
  1. [root@yejr.me]# sqlite3 MySQL_Internal.docset/Contents/Resources/docSet.dsidx

  2. SQLite version 3.28.02019-04-1514:49:49

  3. Enter".help"for usage hints.

  4. sqlite> CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);

  5. sqlite> .exit

  6. [root@yejr.me]#

然后用一个Python脚本解析所有文档页面文件,并且生成索引记录,写入到 docSet.dsidx 索引文件中。

这步的工作比较重要,因为后面我们阅读文档时,可能会搜索一些关键词,因此需要尽可能把这些关键词都写到索引文件里。

写入时,各个关键词可以分属不同的类型,常见文档中的类型几乎都支持,像Category、Class、Command、Constant、Function、Interface、Keyword、Module、Namespace等,不一一列举了。

我为了图省事,写入索引时,全部都指定为Keyword了,重点是能搜索到这些关键词就好。

脚本蓝本:https://github.com/drbraden/pgdash/blob/master/pgdoc2set.py

先看下解析文档的Python脚本:

 
  1. [root@yejr.me]# cat dsidx.py

  2. #!/usr/local/bin/python3

  3.  

  4. import os, re, sqlite3, sys

  5. from bs4 importBeautifulSoup, NavigableString, Tag

  6.  

  7. try:

  8. # 指定sqlite数据文件

  9. db = sqlite3.connect("MySQL_Internal.docset/Contents/Resources/docSet.dsidx")

  10. cur = db.cursor()

  11. except:

  12. print("Open sidx file failed, exit.")

  13. exit

  14.  

  15. docpath = "MySQL_Internal.docset/Contents/Resources/Documents"

  16.  

  17. # 接收参数,便于逐个解析每个文件

  18. doc = "%s"% sys.argv[1];

  19. page = open(os.path.join(docpath, doc)).read()

  20. soup = BeautifulSoup(page, features="html.parser")

  21.  

  22. any = re.compile(".*")

  23. for tag in soup.find_all("a", {"href":any}):

  24. # 删除空格及换行

  25. name = tag.text.strip()

  26. name = name.replace(" ","")

  27. if len(name) > 0:

  28. path = tag.attrs["href"].strip()

  29. if path.split("#")[0] notin("index.html", "index.htm", "bookindex.html"):

  30. # 插入索引记录

  31. sql="INSERT OR IGNORE INTO searchIndex(name,type,path) VALUES ("%s","KEYWORD","%s");"%(name,path);

  32. cur.execute(sql)

  33. # 最后一次性批量提交

  34. db.commit()

  35. db.close()

接下来,我们只需逐个解析文档文件即可:

 
  1. # 扫描文档目录

  2. for f in`ls en`

  3. do

  4. /usr/local/bin/python3 ./docset.py $f

  5. done

最后发现共写入了5600多条记录。

到这里,一个简陋的Dash文档就制作完成了,快和小伙伴们一起分享下成果吧。

P.S,github上已有很多小伙伴在分享他们的成果了:Kapeli/Dash-User-Contributions(https://github.com/Kapeli/Dash-User-Contributions

另外,想要图省事直接获取文档的话,后台发送“dash”关键字获取下载链接,因为Oracle MySQL不让非官方途径发布官网文档,所以不方便直接放上来。之前在我网站下载几个文档并放在上面,也加了入口链接,只是为了方便自己阅读,就这样也被要求下线。

本文参考

  • Dash文档制作教程,https://www.cnblogs.com/xiangzi888/p/4034808.html

  • Docset Generation Guide,https://kapeli.com/docsets

本文首发 https://mp.weixin.qq.com/s/jhWe_ZHd-3n3OEy9YAJSGw

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9155.html

(0)
上一篇 2023-02-14
下一篇 2023-02-14

相关推荐

  • CI session类「建议收藏」

    CI session类「建议收藏」初始化 Session 类 Session 通常会在每个页面载入的时候全局运行,所以 Session 类必须首先被初始化。 您可以在 控制器 的构造函数中初始化它, 也可以在系统中 自动加载。Ses…

    2023-01-26
    181
  • MySQL通讯协议(3)连接阶段[亲测有效]

    MySQL通讯协议(3)连接阶段[亲测有效][TOC] MySQL通讯协议(3)连接阶段 MySQL 连接生命周期 graph TD A[开始] –> |连接|B(ConnectionState) B –> |认证成功|C(Command…

    2023-02-13
    147
  • 实战笔记丨JDBC问题定位指南「建议收藏」

    实战笔记丨JDBC问题定位指南「建议收藏」JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首…

    2023-03-16
    139
  • 用Python实现数据可视化,让数据更加直观易懂

    用Python实现数据可视化,让数据更加直观易懂在数据分析和挖掘过程中,我们需要通过各种方式去理解和呈现数据,其中,数据可视化是一种非常重要的技术手段,可以让我们将复杂的数据转化为直观、易懂的图表,帮助我们更好地理解数据背后的规律和趋势。Python作为一种强大的数据分析和可视化工具,在这方面也有着独特的优势。

    2023-08-24
    121
  • PyCharm库介绍

    PyCharm库介绍在Python开发中,PyCharm是最受欢迎的IDE之一,凭借着友好的界面、强大的功能、集成丰富的库与插件等优势,成为了广大Python开发者的选择。PyCharm不仅提供了基础的代码编写和调试功能,而且还支持一些重要的Python库。

    2024-08-14
    28
  • MongoDB学习笔记:副本集[通俗易懂]

    MongoDB学习笔记:副本集[通俗易懂]本文更新于2022-01-08,使用MongoDB 4.4.5。 单台服务器下创建副本集 确保/data/db目录存在且当前系统用户有读写权限。例如(需根据实际情况设置权限): su root mkd

    2023-05-05
    137
  • 有xp系统可以安装2000数据库_数据库db全称

    有xp系统可以安装2000数据库_数据库db全称今天我会进行StoneDB数据库在CentOS 7系统下的安装。 官方的快速部署文档中已有详细的安装流程,我会严格按照流程操作。 准备CentOS系统 我在本地虚拟机上安装好了CentOS 7系统的2

    2023-06-02
    145
  • windows上安装redis并配置远程访问「建议收藏」

    windows上安装redis并配置远程访问「建议收藏」本篇文章主要是写一下我在配置redis时遇到的坑,安装redis的教程可以查看这篇文章:https://www.cnblogs.com/wuwuyong/p/11697643.html; 1.第一个坑

    2023-02-16
    147

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注