# Graphol: A Graphical Language for Ontology Modeling Equivalent to OWL 2
## 4 The Graphol Language
### Graphol Semantics  
An important desiderata of visual modeling languages is to have clear and precise semantics [71, 72]. To this aim, here we provide the semantics of Graphol expressions and assertions by giving their one-to-one correspondence with DL expressions and assertions, which in turn have formal semantics, as discussed in Section 3. We start with Graphol expressions, and define a function \(\Lambda\) which takes as input a Graphol expression \(E_{G}\) and computes a DL expression that encodes it. To formalize \(\Lambda\), we use \(\mathsf{sk}(E_{G})\) to denote the sink of \(E_{G}\), and \(\mathsf{ar}(E_{G})\) the set of Graphol expressions linked to \(\mathsf{sk}(E_{G})\) through input edges (of course, this set can be empty). We formally define \(\Lambda\) as follows:  
* If \(\mathsf{sk}(E_{G})\) is a concept, role, attribute, value-domain, or individual/value node with label \(S\), then \(\Lambda(E_{G})=S\) (we are considering concept, role, attribute, value-domain, individual, and value alphabets as pairwise disjoint. Moreover, if \(S=\)\"Top\", we assume that \(\Lambda\) returns the corresponding DL universal predicate, which depends on the form of \(\mathsf{sk}(E_{G})\). Analogously if \(S=\)\"Bottom\");
* If \(\mathsf{sk}(E_{G})\) is a domain restriction node with label \"exists\" (resp., \"forall\", \"\((x,-)\)\", \"\((-,y)\)\"), and \(\mathsf{ar}(E_{G})=\{\epsilon_{RA},\epsilon_{CV}\}\), where either \(\epsilon_{RA}\) is a Graphol role expression and \(\epsilon_{CV}\) is a Graphol concept expression or \(\epsilon_{RA}\) is a Graphol attribute expression and \(\epsilon_{CV}\) is a Graphol value-domain expression, then \(\Lambda(E_{G})=\exists\Lambda(\epsilon_{RA}).\Lambda(\epsilon_{CV})\) (resp., \(\Lambda(E_{G})=\forall\Lambda(\epsilon_{RA}).\Lambda(\epsilon_{CV})\), \(\Lambda(E_{G})=\geq x\;\Lambda(\epsilon_{RA}).\Lambda(\epsilon_{CV})\), \(\Lambda(E_{G})=\leq y\;\Lambda(\epsilon_{RA})\). \(\Lambda(\epsilon_{CV})\));
* if \(\mathsf{sk}(E_{G})\) is a range restriction node with label \"exists\" (resp. \"forall\", \"\((x,-)\)\", \"\((-,y)\)\"), and \(\mathsf{ar}(E_{G})=\{\epsilon_{R},\epsilon_{C}\}\), where \(\epsilon_{R}\) is a Graphol role expression and \(\epsilon_{C}\) is a Graphol concept expression, then \(\Lambda(E_{G})=\exists(\Lambda(\epsilon_{R}))^{-}.\Lambda(\epsilon_{C})\) (resp. \(\Lambda(E_{G})=\forall(\Lambda(\epsilon_{R}))^{-}.\Lambda(\epsilon_{C})\), \(\Lambda(E_{G})=\geq x\;(\Lambda(\epsilon_{R}))^{-}.\Lambda(\epsilon_{C})\), \(\Lambda(E_{G})=\leq y\;(\Lambda(\epsilon_{R}))^{-}.\Lambda(\epsilon_{C})\));
* If \(\mathsf{sk}(E_{G})\) is a domain (resp., range) restriction node with label \"self\", and \(\mathsf{ar}(E_{G})=\{\epsilon_{RA}\}\), where \(\epsilon_{RA}\) is a Graphol role expression, then \(\Lambda(E_{G})=\exists\Lambda(\epsilon_{RA}).Self\) (resp., \(\Lambda(E_{G})=\exists(\Lambda(\epsilon_{RA}))^{-}.Self\)) ;
* If \(\mathsf{sk}(E_{G})\) is a range restriction node with label \"exists\" and \(\mathsf{ar}(E_{G})=\{\epsilon_{A}\}\), where \(\epsilon_{A}\) is a Graphol attribute expression, then \(\Lambda(E_{G})=\exists(\Lambda(\epsilon_{A}))^{-}\);
* If \(\mathsf{sk}(E_{G})\) is a union (resp. intersection or a one-of ) node and \(\mathsf{ar}(E_{G})=\{\epsilon^{1},\ldots,\epsilon^{n}\}\), then \(\Lambda(E_{G})=\bigcup_{i=1}^{n}\Lambda(e^{i})\) (resp.