高级数据结构可视化的想法?

高级数据结构可视化的想法?

我想为自定义创建(图形)表示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}

上面的例程非常简单,但可以轻松修改以更好地进行颜色编码、对字段进行排序和添加注释等。作为奖励,不需要任何 catcode。如果您对 json 解决方案感兴趣,请留言,我会发布一个。

答案2

一个例子:找到它 http://ddi.uni-wuppertal.de/material/materialsammlung/

软件包位于 CTAN 上:http://ctan.org/pkg/schule

铁路图——由 Niklaus Wirth 使用编程语言 Pascal 引入

\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}

相关内容