Quero criar uma representação (gráfica) para um projeto personalizadoHL7 v2estrutura da mensagem. Neste cenário, estou preocupado apenas com a estrutura da mensagem de alto nível – a organização e o uso dos segmentos de uma mensagem. Os documentos oficiais (que não estão disponíveis a menos que você pague por eles, AFAIK) usam uma notação de tabela como esta:
Nesta estrutura, os diferentes colchetes denotam segmentos opcionais []
e repetíveis , {}
bem como alternativas <x|y|z>
. Nossa estrutura personalizada é construída sobre esse padrão e basicamente anexa alguns segmentos e declara que nunca usaremos outros segmentos. Até agora, simplesmente imitamos a estrutura semelhante a uma tabela, mas acho que isso é difícil de ler, especialmente com vários níveis aninhados de grupos condicionais. Eu estava pensando em converter oExemplo de árvore de arquivos TikZpara representar a estrutura de dados, mas com todas as child [missing]
entradas e outras peculiaridades, fiquei pensando se existem outras opções (melhores?).
Responder1
Concordo plenamente que o formato atual que você está usando é estranho e possivelmente esclarece os muitos motivos pelos quais os projetos de software de saúde falham; que IMHO é devido à complexificação burocrática. Ter que pagar pelos formatos acrescenta insulto à injúria.
Eu recomendaria usar Lua. Se você gerar os dados para composição tipográfica programaticamente, eu usaria tabelas Lua diretamente. Se eles forem gerados a partir de um banco de dados, exporte-os como XML ou de preferência json. Aqui está um programa simplificado para demonstrar isso. Não há necessidade de ferrovias ou caixas, você pode ler os dados como um parágrafo de um livro.
\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}
A rotina acima é muito simples, porém pode ser facilmente modificada para colorir melhor o código, classificar os campos e adicionar notas, etc. Como bônus, não há necessidade de nenhum catcode. Se você estiver interessado em uma solução JSON, deixe uma mensagem e eu postarei uma.
Responder2
Um exemplo: encontre em http://ddi.uni-wuppertal.de/material/materialsammlung/
o pacote está no 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}