我想為自訂創建一個(圖形)表示HL7 v2訊息結構。在這種情況下,我只關心高級訊息結構 - 訊息段的排列和使用。官方文件(據我所知,除非您付費,否則無法使用)使用以下表格表示法:
在此結構中,不同的括號表示可選[]
和可重複的{}
段落以及替代項<x|y|z>
。我們的自訂結構建立在這個標準的基礎上,基本上附加了一些段落,並聲明我們永遠不會使用某些其他段落。到目前為止,我們只是模仿了類似表格的結構,但我發現這很難閱讀,特別是對於條件組的多個嵌套層級。我正在考慮轉換TikZ 檔案樹範例來表示資料結構,但考慮到所有child [missing]
條目和其他特性,我想知道是否有其他(更好?)的選擇。
答案1
我完全同意您目前使用的格式很尷尬,並且可能它揭示了健康軟體專案失敗的許多原因;恕我直言,這是由於官僚主義的複雜化所造成的。必須為格式付費更是雪上加霜。
我推薦使用Lua。如果您以程式設計方式產生用於排版的數據,我會直接使用 Lua 表。如果它們是從資料庫產生的,請將它們匯出為 XML 或最好是 json。這是一個簡化的程序來演示這一點。不需要任何鐵路或箱子,您可以像書中的段落一樣讀取資料。
\documentclass{article}
\usepackage{fontspec,luacode, xcolor}
\newfontfamily{\arial}{Arial}
\begin{document}
\arial
\begin{luacode}
if type(tex)=='table' then local print = tex.print end
local patientVisit = {
patientClass = "CON",
assignedPatientLocation = {
pointOfCare = "8152879"
},
visitNumber = {
idNumber = 16164813
}
}
function inspect_table (tab, offset)
offset = offset or "\\mbox{~~}"
for k, v in pairs (tab) do
local newoffset = offset .. offset
if type(v) == "table" then
print(offset..k .. " = \\{\\par ")
inspect_table(v, newoffset)
print(offset.."\\}\\par")
else
if k=="patientClass" then print(offset .. '{\\color{red}'.. k .. "} = " .. tostring(v), "\\par")
else
print(offset..k.."="..v.."\\par")
end
end
end
end
inspect_table(patientVisit)
\end{luacode}
上面的例程非常簡單,但可以輕鬆修改為更好的顏色代碼、對欄位進行排序並添加註解等。如果您對 json 解決方案感興趣,請留言,我將發布一個。
答案2
一個例子:找到它 http://ddi.uni-wuppertal.de/material/materialsammlung/
包裹在 CTAN 上:http://ctan.org/pkg/schule
\documentclass{schulein}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}
\begin{document}
\begin{tikzpicture}[syntaxdiagramm]
\node [] {};
\node [terminal] {public};
\node [terminal] {class};
\node [nonterminal] {Klassenname};
\node [terminal] {\{};
\node (endstart) [point] {};
\node [point, below=of endstart] {};
\node [point, xshift=-75mm] {};
\node (endAttribute) [endpoint, continue chain=going below] {};
\node (startAttribute) [point] {};
{[start chain=attribute going right]
\chainin (startAttribute);
\node [point, xshift=25mm] {};
\node [point, continue chain=going above] {};
\node [nonterminal, continue chain=going left] {Attribut};
\node [point, join,join=with endAttribute] {};
}
\node (startKonstruktor) [point] {};
\node (endKonstruktor) [endpoint] {};
{[start chain=konstruktor going right]
\chainin (startKonstruktor);
\node [point, xshift=30mm] {};
\node [point, continue chain=going below] {};
\node [nonterminal, continue chain=going left] {Konstruktor};
\node [point, join,join=with endKonstruktor] {};
}
\node (endMethode) [endpoint] {};
\node (startMethode) [point] {};
{[start chain=methode going right]
\chainin (startMethode);
\node [point, xshift=25mm] {};
\node [point, continue chain=going above] {};
\node [nonterminal, continue chain=going left] {Methode};
\node [point, join,join=with endMethode] {};
}
\node [point] {};
\node [terminal, continue chain=going left] {\}};
\end{tikzpicture}
\end{document}