1

I need to create a drawing in tikz to represent a certain metamodel. What would be the ideal way to create it?

XES metamodel

6

enter image description here

This should be enough to get you started:

\documentclass[tikz, border=20]{standalone}
\usetikzlibrary{arrows,calc,shapes}
\begin{document}        
    \begin{tikzpicture}
        \tikzset{dark box/.style={draw,fill=gray!80,rounded corners, minimum height=0.5cm, minimum width=2cm}}
        \tikzset{oval/.style={draw,fill=gray!80,ellipse,minimum height=0.5cm, minimum width=2cm}}
        
        % Main nodes
        \node[dark box] (string) {String};
        \node[dark box, below=0.4cm] (date) at (string) {Date};
        \node[dark box, below=0.4cm] (int) at (date) {Int};
        \node[dark box, below=0.4cm] (float) at (int) {Float};
        \node[dark box, below=0.4cm] (boolean) at (float) {Boolean};
        
        % Left arrows
        \draw[<->, >=open diamond] (string.east) --++(0.5, 0) -- ++(0, -0.65) -- (date.east);
        \draw[->, >=open diamond] (date.east) ++(0.5, 0) -- ++(0, -0.65) -- (int.east);
        \draw[->, >=open diamond] (int.east) ++(0.5, 0) -- ++(0, -0.65) -- (float.east);
        \draw[->, >=open diamond] (float.east) ++(0.5, 0) -- ++(0, -0.65) -- (boolean.east);
        % Right arrows
        \draw[->, >=open triangle 90] (string.west) -- ++(-0.5, 0) -- ++(0, 0.5);
        \draw (boolean.west) -- ++(-0.5, 0) -- ++(0, 2.7);
        \draw (date.west) -- ++(-0.5, 0);
        \draw (int.west) -- ++(-0.5, 0);
        \draw (float.west) -- ++(-0.5, 0);
        
        % Value node
        \node[oval] (value) at ($(float) + (3,0)$) {Value};
        \draw (value.west) -- ($(float.east) + (0.5, 0)$);
        
        % Attribute node
        \node[draw, dashed, fill=gray!80, rounded corners, minimum width=2cm, minimum height=1cm]  (attribute) at ($(string) + (-1.5, 1)$) {Attribute};
    \end{tikzpicture}
\end{document}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.