搭建盘口如何应用飞鸟 SQLite 生成平台零碎文档和软件配置开发?
思否用户 TG 电报 duotebb 版权,转载请注明出处。
为什么要应用 SQLite 来保护文档?或者用它来管理软件配置文件?
在本文中,我将解释益处并演示如何应用 SQLite 生成文档。
我为一个大型衰弱我的项目保护了几份文件。依据文档的指标受众,文档以不同的形式显示雷同的数据。
第一个是公布规范列表,第二个是基于角色的访问控制矩阵。数据集随着我的项目对新用例的响应而增长和演变。领有从数据生成文档的自动化流程至关重要。
我没有尝试别离保护这两个文档并可能使它们不同步,而是决定应用 SQLite 来保留数据的地方正本并应用 SQL(结构化查询语言)查问来生成所需的文档格局代码。
SQLite 应用单个终端命令来拜访其所有性能。这个命令 sqlite3 能够轻松编写文档创立过程中的步骤脚本。将 SQLite 命令链接在一起的能力使该过程灵便且可反复。此外,这些命令的输入能够通过管道传输到内部文件中。大多数文档构建过程能够包含这些内部文件,以确保在文档中出现最新数据。
利用 SQL 语法的弱小性能,您还能够控制数据的程序以及跨多个页面的大型后果的拆分。
此外,因为整个过程是脚本化的,在我的例子中应用 make,能够应用源代码管制来治理生成文档的命令。应用源代码版本零碎,如 Git GNU Make,能够让您跟踪对文档数据所做的更改历史记录。
文件类型
我保护的数据集是区域衰弱信息替换中应用的医疗文档类型列表。
数据集蕴含三个字段:文档名称、临床代码和模式。我将列表保留在一个简略的逗号分隔 (CSV) 数据文件中,例如:
Discharge Letter,823701000000103,SNOMED-CT
Drug/substance use,1064501000000103,SNOMED-CT
End of Life Care Document,861411000000103,SNOMED-CT
将数据导入 SQLite
CSV 文件是我的主数据源。如果我须要更改条目,我会在 CSV 文件中进行更改,而后重新处理数据。如果我向衰弱替换增加新的文档类型,我会将条目增加到 CSV 文件中,而后运行make load 将数据加载到 SQLite 中以进行进一步解决。
我应用 GNU Make 来运行我须要的命令。
没有必要应用 make。如果您更相熟应用 bash 脚本或 Windows 批处理文件,请应用它们。对我来说,make 零碎是将一组命令组合在一起的简略办法。
make 零碎在您的我的项目文件夹中读取一个 makefile。makefile 蕴含要依照您要运行的程序运行的命令。makefile 能够有多个指标;由一个关键字后跟一个冒号字符示意。当您运行后跟指标名称的 make 命令时,只会执行该局部中的命令。
我在我的 makefile 中应用了两个指标,使我能够轻松加载数据并生成文档文档。上面的代码显示了我用来将 CSV 文件导入数据库表的 SQLite 命令。
load:
sqlite3 -cmd ".read create_tables.sql"
-cmd ".mode csv"
-cmd ".import document_types.csv document_types"
document_types.db < count.sql
sqlite3 命令行实用程序的 -cmd 参数容许您指定须要执行的命令。咱们须要应用多个 -cmd 序列来顺次执行咱们须要的命令。在下面的示例中,咱们首先读取并运行 create_tables.sql 文件中的 SQL 语句,该文件会删除并从新创立数据库文件 document_types.db 中的文档类型表。
而后咱们在导入 CSV 文件之前将操作模式切换为 CSV。.import 命令有两个参数。第一个参数是蕴含您的数据的 CSV 文件的名称。第二个参数批示 SQLite 应该将数据导入到哪个表中。最初,咱们读取并执行 count.sql 文件,该文件统计表中的记录数并将其打印到终端屏幕。
创立表 SQL
上面的 SQL 代码显示了 create_tables.sql 文件的内容。它首先删除表 document_types 以革除旧数据;而后通过提供列定义从新创立表。
DROP TABLE IF EXISTS document_types;
CREATE TABLE document_types (
"name" TEXT,
"code" TEXT,
"scheme" TEXT
);
文件 count.sql 的内容如下所示。
SELECT COUNT(*) || ‘ : Records Imported’
FROM document_types;
当初咱们将数据保留在 SQLite 数据库文件中;咱们能够从生成文档代码开始。
创立文档代码
您应用哪种文档零碎无关紧要;它们通常都反对蕴含文件。LaTex、Asciidocter 和 DocBook 都反对包含文件。要害是让 SQLite 以文档零碎所需的格局生成输入。
就集体而言,我应用 LaTeX,在表格中显示数据的代码如下所示:
\section*{Document Types}
\begin{center}
\begin{tabular}{p{8cm} p{3cm} p{2.7cm} }
\bfseries{Value} & \bfseries{Node} & \bfseries{Schema} \\
\toprule
\input{doc-types-table.tex}
\bottomrule
\end{tabular}
\end{center}
下面代码片段中感兴趣的行是 input{doc-types-table.tex}这行批示 LaTeX 零碎导入蕴含在名为 doc-types-table.tex 的文件中的命令。
咱们须要让 SQLite 应用数据和正确的格局代码生成该文件,以将其出现为表的一部分。
表格行的 LaTeX 格局如下所示。
与号字符分隔表中的每一列。每行的开端由两个反斜杠字符示意。\midrule 命令在表格行之间产生一条细线。
Discharge Letter & 823701000000103 & SNOMED-CT \ \midrule
因而,咱们须要一个 SQLite SQL 命令来输入上述格局的数据。我应用的 SQL 如下所示。应用 SQLite 结构 || 将数据字段连贯(连贯)在一起,用 & 字符分隔。SQL 语句还将数据按名称程序排序,我将返回的记录数限度为 30,因为给定页面上只能包容 30 个条目。
SELECT name || ‘ & ‘ || code || ‘ & ‘ || scheme || ‘ \ \midrule ‘ AS LaTeX
FROM document_types
ORDER BY name
LIMIT 0, 30;
如果下面的 SQL 被保留到一个名为 publishing_standards_page.sql 的文件中,那么咱们能够更新咱们的 makefile 以蕴含一个 docs: 指标,这样咱们就能够在每次想要从新生成文档时收回命令 *make docs”。
当咱们切换到列表模式并将输入重定向到 LaTeX 我的项目文件夹中的文件 doc-types-table.tex 时,SQLite 命令略有不同。
docs:
sqlite3 -cmd ".mode list"
document_types.db
< publishing_standards_page.sql
> /path/to/latex/doc-types-table.tex
一旦您理解了数据库生成文档的想法,您就能够从同一数据集中为不同的受众主动创立许多不同的文档。
例如,咱们还有一个新角色文档的申请,用户必须在咱们定义新角色之前实现该文档。此文档是一个 PDF,它再次列出了文档类型,但须要生成复选框,以便人们能够表白新角色应该有权查看哪些文档。
LaTeX 十分好,因为它能够应用 PDF 创立表单。上面的 SQL 保留在名为 roles_request_form.sql 的文件中,并生成生成 PDF 表单所需的 LaTeX 代码。表单中的每个复选框都须要有一个惟一的名称。因而,我应用了 SQLite 内置关键字 ROWID,它返回每条记录的惟一外部行号。
SELECT name || ‘ & \CheckBox[name=’ || ROWID ||
', width=1em, bordercolor={lightgray}]{Yes} \\ \midrule' AS LaTeX
FROM document_types
ORDER BY name
LIMIT 0, 30;
更新后的 makefile 如下所示。
docs:
sqlite3 -cmd ".mode list"
document_types.db
< publishing_standards_page.sql
> /path/to/latex/doc-types-table.tex
sqlite3 -cmd ".mode list"
document_types.db
< roles_request_form.sql
> /path/to/latex/doc-roles-form.tex
创立软件配置
雷同的过程也可用于生成您的软件配置文件。衰弱替换应用 XML 文件将限制性策略利用于用户组。例如,临床用户能够查看除两个特定文档之外的所有文档类型。该数据库用于生成软件配置这些策略所需的 XML 配置文件。
SELECT
‘<AttributeValue DataType=”http://www.w3.org/2001/XMLSchema#string”>’ ||
code || ‘</AttributeValue>’ AS ClinicalRole
FROM document_types
WHERE code IN (‘149741000000107’, ‘723394009’)
GROUP BY code
ORDER BY code;
下面的示例 SQL 提取了不容许临床人员查看的两个文档的文档临床代码。
config:
sqlite3 -cmd ".mode list"
document_types.db
< clinical_role_restrictions.sql
> /path/to/software/configs/roles.xml