%%% apendice.tex --- 

%% Author: Giménez, Christian
%% Version: $Id: apendice.tex,v 0.0 2017/06/08 15:30:15 christian Exp$

% Copyright 2017 Giménez, Christian
  
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.

% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.

% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Cualquier duda ejecutar texdoctk.

\chapter[Secuencia de Entradas y Salidas de la Implementación]{Secuencia de Entradas y Salidas de la Implementación del Prototipo}
\label{sec:apendice secuencias}
\section{Ejemplo de un Documento OWL en Varias Sintaxis  }
\label{sec:owl-varias-sintaxis}
Considere el Ejemplo \ref{ej:ALC} donde se presenta una ontología en lógica descriptiva \ALCQI{}. En las Figuras \ref{fig:ejemplo-owl} y \ref{fig:ejemplo-owl-ttl} se presenta la misma lógica en sintaxis XML, Turtle.
% y \ref{fig:ejemplo-owl-manchester} 


\begin{figure}[p]
  \centering
  \scriptsize
\begin{verbatim}
<!DOCTYPE Ontology [ 
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
]>

<Ontology xml:base="http://example.com/owl/families/" ontologyIRI="http://example.com/owl/families"
  xmlns="http://www.w3.org/2002/07/owl#">
  <Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
  <Prefix name="mydom" IRI="http://myhost.com/myontology#"/>

  <Declaration><Class abbreviatedIRI="mydom:Empleado"/></Declaration>
  <Declaration><Class abbreviatedIRI="mydom:Manager"/></Declaration>
  <Declaration><Class abbreviatedIRI="mydom:AreaManager"/></Declaration>
  <Declaration><Class abbreviatedIRI="mydom:TopManager"/></Declaration>
  <Declaration><Class abbreviatedIRI="mydom:Proyecto"/></Declaration>
  <Declaration><ObjectProperty abbreviatedIRI="mydom:trabajaPara"/></Declaration>
  <Declaration><ObjectProperty abbreviatedIRI="mydom:gestiona"/></Declaration> 

  <SubClassOf><!-- 1 -->
    <Class abbreviatedIRI="mydom:Manager"/><Class abbreviatedIRI="mydom:Empleado"/></SubClassOf>
  <SubClassOf><!-- 2 -->
    <Class abbreviatedIRI="mydom:AreaManager"/><Class abbreviatedIRI="mydom:Manager"/></SubClassOf>
  <SubClassOf><!-- 3 -->
    <Class abbreviatedIRI="mydom:TopManager"/><Class abbreviatedIRI="mydom:Manager"/></SubClassOf>
  <SubClassOf><!-- 4 -->
    <Class abbreviatedIRI="mydom:Manager"/>
    <ObjectUnionOf><Class abbreviatedIRI="mydom:AreaManager"/><Class abbreviatedIRI="mydom:TopManager"/>
  </ObjectUnionOf></SubClassOf>
  <SubClassOf><!-- 5 -->
    <ObjectIntersectionOf><Class abbreviatedIRI="mydom:AreaManager"/>
    <Class abbreviatedIRI="mydom:TopManager"/></ObjectIntersectionOf>
    <Class abbreviatedIRI="Nothing"/></SubClassOf>
  <SubClassOf><!-- 6 -->
    <ObjectSomeValuesFrom><ObjectProperty abbreviatedIRI="mydom:trabajaPara"/>
    <Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom>
    <Class abbreviatedIRI="mydom:Empleado"/>
  </SubClassOf>
  <SubClassOf><!-- 7 -->
    <ObjectSomeValuesFrom><ObjectInverseOf><ObjectProperty abbreviatedIRI="mydom:trabajaPara"/>
      </ObjectInverseOf><Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom>
    <Class abbreviatedIRI="mydom:Proyecto"/></SubClassOf>
  <SubClassOf><!-- 8 -->
    <Class abbreviatedIRI="mydom:Proyecto"/><ObjectSomeValuesFrom>
      <ObjectInverseOf><ObjectProperty abbreviatedIRI="mydom:trabajaPara"/></ObjectInverseOf>
      <Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom></SubClassOf>
  <SubClassOf><!-- 9 -->
    <ObjectSomeValuesFrom><ObjectProperty abbreviatedIRI="mydom:gestiona"/>
      <Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom>
    <Class abbreviatedIRI="mydom:TopManager"/></SubClassOf>
  <SubClassOf><!-- 10 -->
    <ObjectSomeValuesFrom><ObjectInverseOf><ObjectProperty abbreviatedIRI="mydom:gestiona"/>
      </ObjectInverseOf><Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom>
      <Class abbreviatedIRI="mydom:Proyecto"/></SubClassOf>
  <SubClassOf><!-- 11 -->
    <Class abbreviatedIRI="mydom:Proyecto" /><ObjectSomeValuesFrom><ObjectInverseOf>
	<ObjectProperty abbreviatedIRI="mydom:gestiona"/></ObjectInverseOf>
      <Class abbreviatedIRI="Thing"/></ObjectSomeValuesFrom></SubClassOf>
  <SubClassOf><!-- 12 -->
    <Class abbreviatedIRI="mydom:TopManager" /><ObjectSomeValuesFrom>
      <ObjectProperty abbreviatedIRI="mydom:gestiona"/><Class abbreviatedIRI="Thing"/>
      </ObjectSomeValuesFrom></SubClassOf>
  <SubClassOf><!-- 13 -->
    <ObjectMaxCardinality cardinality="2"><ObjectProperty abbreviatedIRI="mydom:gestiona"/>
      <Class abbreviatedIRI="Thing" /></ObjectMaxCardinality>
    <Class abbreviatedIRI="Nothing" /></SubClassOf>
  <SubClassOf><!-- 14 -->
    <ObjectMaxCardinality cardinality="2"><ObjectInverseOf>
      <ObjectProperty abbreviatedIRI="mydom:gestiona"/></ObjectInverseOf>
      <Class abbreviatedIRI="Thing"/></ObjectMaxCardinality><Class abbreviatedIRI="Nothing"/>
   </SubClassOf></Ontology>
\end{verbatim}
    
  \caption{Ejemplo de un documento OWL que representa la KB dada en el Ejemplo \ref{ej:ALC}.}
  \label{fig:ejemplo-owl}
\end{figure}

\begin{figure}[p]
  \centering
  \scriptsize
\begin{verbatim}
@prefix : <http://myhost.com/myontology#> .
@prefix otherOnt: <http://example.org/otherOntologies/families/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:Empleado rdf:type owl:Class .
:Manager rdf:type owl:Class .
:AreaManager rdf:type owl:Class .
:TopManager rdf:type owl:Class .
:Proyecto rdf:type owl:Class .
:gestiona rdf:type owl:ObjectProperty .
:gestiona rdfs:domain :TopManager ;
    rdfs:range :Proyecto .    
:trabajaPara rdf:type owl:ObjectProperty .
:trabajaPara rdfs:domain :Empleado ;
    rdfs:range :Proyecto .

:Manager rdfs:subClassOf :Empleado .                                                         # 1
:AreaManager rdfs:subClassOf :Manager .                                                      # 2
:TopManager rdfs:subClassOf :Manager .                                                       # 3
:Manager rdfs:subClassOf [                                                                   # 4
   rdf:type owl:Class ; owl:unionOf ( :AreaManager :TopManager ) ] . 
[] rdf:type owl:Class ; owl:intersectionOf ( :AreaManager :AreaManager ) ;                   # 5   
    rdfs:subClassOf [ rdf:type owl:Class ; owl:Nothing ] .
[] rdf:type owl:Class ;                                                                      # 6
    [ rdf:type owl:Restriction ; owl:onProperty :trabajaPara ; owl:someValuesFrom owl:Thing ]         
    rdfs:subClassOf [ rdf:type owl:Class ; :Empleado ] .
[] rdf:type owl:Class ;                                                                      # 7
    [ rdf:type owl:Restriction ; owl:onProperty [ owl:inverseOf :trabajaPara ] ; 
      owl:someValuesFrom owl:Thing ]
    rdfs:subClassOf [ rdf:type owl:Class ; :Proyecto ] .
:Proyecto rdfs:subClassOf [                                                                  # 8
     rdf:type owl:Class ; [ rdf:type owl:Restriction ;
          owl:onProperty [ owl:inverseOf :trabajaPara ] ; owl:someValuesFrom owl:Thing ] ] .
[] rdf:type owl:Class ;                                                                      # 9
    [ rdf:type owl:Restriction ; owl:onProperty :gestiona ; owl:someValuesFrom owl:Thing ]
    rdfs:subClassOf [ rdf:type owl:Class ; :TopManager ] .
[] rdf:type owl:Class ; [ rdf:type owl:Restriction ;                                         # 10
      owl:onProperty [ owl:inverseOf :gestiona ] ; owl:someValuesFrom owl:Thing ]
    rdfs:subClassOf [ rdf:type owl:Class ; :Proyecto ] .
:Proyecto rdfs:subClassOf [                                                                  # 11
    rdf:type owl:Class ; [ rdf:type owl:Restriction ; 
        owl:onProperty [ owl:inverseOf :gestiona ] ; owl:someValuesFrom owl:Thing ] ] .
:TopManager rdfs:subClassOf [                                                                # 12
     rdf:type owl:Class ; 
     [ rdf:type owl:Restriction ; owl:onProperty :gestiona ; owl:someValuesFrom owl:Thing ] ] .
[] rdf:type owl:Class ;                                                                      # 13
    [ rdf:type owl:Restriction ; owl:maxCardinality  "2"^^xsd:nonNegativeInteger ; 
      owl:onProperty :gestiona ] ; rdfs:subClassOf owl:Nothing .
[] rdf:type owl:Class ;                                                                      # 14
    [ rdf:type owl:Restriction ; owl:maxCardinality  "2"^^xsd:nonNegativeInteger ;
        owl:onProperty [ owl:inverseOf :gestiona ] ] ; rdfs:subClassOf owl:Nothing .
\end{verbatim}
    
  \caption{Ejemplo de un documento OWL usando la sintaxis Turtle que representa la KB dada en el Ejemplo \ref{ej:ALC}.}
  \label{fig:ejemplo-owl-ttl}
\end{figure}

%   \begin{figure}[h]
%     \centering

% \begin{verbatim}

% \end{verbatim}
    
%     \caption{Ejemplo de un documento OWL usando la sintaxis Manchester que representa la KB dada en el Ejemplo \ref{ej:ALC}.}
%     \label{fig:ejemplo-owl-manchester}
%   \end{figure}
\section{Ejemplo Satisfacible}
En este capítulo se describirá la secuencia de entradas y salidas de cada módulo, considerando como el modelo conceptual de entrada dado en la Figura \ref{fig:mod_con_con}.

\subsection{Modelo JSON Mantenido por El Cliente}
El motor Javascript mantendrá el siguiente modelo JSON, el cual será enviado al servidor ante la petición de chequeo de consistencia.

\begin{figure}[H]
  \centering
  \scriptsize
  \begin{minipage}{0.45\textwidth}
\begin{verbatim}
{"classes":[  
  {"name":"PhoneBill","attrs":[],"methods":[],
   "position":{"x":20,"y":20}},
  {"name":"PhoneCall","attrs":[],"methods":[],
   "position":{"x":352,"y":28}},
  {"name":"Phone","attrs":[],"methods":[],
   "position":{"x":685,"y":28}},
  {"name":"MobileCall","attrs":[],"methods":[],
   "position":{"x":352,"y":191}},
  {"name":"CellPhone","attrs":[],"methods":[],
   "position":{"x":608,"y":183}},
  {"name":"FixedPhone","attrs":[],"methods":[],
   "position":{"x":780,"y":187}}],
\end{verbatim}
  \end{minipage}
  \begin{minipage}{0.45\textwidth}
\begin{verbatim}
"links":[
  {"name":"r5",
   "classes":["PhoneBill","PhoneCall"],
   "multiplicity":["1..1","1..*"],
   "type":"association"},
  {"name":"r6","classes":["PhoneCall","Phone"],
   "multiplicity":[null,"1..1"],
    "type":"association"},
  {"name":"r7","classes":["MobileCall"],
   "multiplicity":null,"type":"generalization",
   "parent":"PhoneCall","constraint":[]},
  {"name":"r8",
    "classes":["MobileCall","CellPhone"],
   "multiplicity":[null,null],
   "type":"association"},
  {"name":"r9",
   "classes": ["CellPhone","FixedPhone"],
   "multiplicity":null,"type":"generalization",
   "parent":"Phone","constraint":
      ["disjoint","covering"]}],
"owllink":""}
\end{verbatim}
  \end{minipage}
  \caption{Representación JSON del modelo conceptual de la Figura \ref{fig:mod_con_con}}
  \label{fig:ej_mod_json}
\end{figure}

\subsection{Representación OWL 2}
Posteriormente, el modelo conceptual es traducido a lógica descriptiva utilizando la sintaxis XML basada en OWL 2.

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
<SubClassOf><Class IRI="PhoneBill"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf><Class IRI="PhoneCall"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf><Class IRI="Phone"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf><Class IRI="MobileCall"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf><Class IRI="CellPhone"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf><Class IRI="FixedPhone"></Class><Class abbreviatedIRI="Thing"></Class></SubClassOf>
<SubClassOf>
  <Class abbreviatedIRI="Thing"></Class>
  <ObjectIntersectionOf>
    <ObjectAllValuesFrom>
      <ObjectProperty IRI="r5"></ObjectProperty><Class IRI="PhoneBill"></Class>
    </ObjectAllValuesFrom>
    <ObjectAllValuesFrom>
      <ObjectInverseOf><ObjectProperty IRI="r5"></ObjectProperty></ObjectInverseOf>
      <Class IRI="PhoneCall"></Class>
    </ObjectAllValuesFrom>
  </ObjectIntersectionOf>
</SubClassOf>
<SubClassOf><Class IRI="PhoneBill"></Class>
  <ObjectMinCardinality cardinality="1"><ObjectProperty IRI="r5"></ObjectProperty></ObjectMinCardinality>
</SubClassOf>
<SubClassOf><Class IRI="PhoneCall"></Class>
  <ObjectIntersectionOf><ObjectMinCardinality cardinality="1">
    <ObjectInverseOf><ObjectProperty IRI="r5"></ObjectProperty></ObjectInverseOf>
    </ObjectMinCardinality><ObjectMaxCardinality cardinality="1">
      <ObjectInverseOf><ObjectProperty IRI="r5"></ObjectProperty></ObjectInverseOf>
    </ObjectMaxCardinality>
  </ObjectIntersectionOf>
</SubClassOf>
<SubClassOf><Class abbreviatedIRI="Thing"></Class>
  <ObjectIntersectionOf>
    <ObjectAllValuesFrom>
      <ObjectProperty IRI="r6"></ObjectProperty><Class IRI="PhoneCall"></Class>
    </ObjectAllValuesFrom>
    <ObjectAllValuesFrom>
      <ObjectInverseOf><ObjectProperty IRI="r6"></ObjectProperty></ObjectInverseOf>
      <Class IRI="Phone"></Class>
    </ObjectAllValuesFrom>
  </ObjectIntersectionOf>
</SubClassOf>
<SubClassOf>
  <Class IRI="PhoneCall"></Class>
  <ObjectIntersectionOf>
    <ObjectMinCardinality cardinality="1"><ObjectProperty IRI="r6"></ObjectProperty></ObjectMinCardinality>
    <ObjectMaxCardinality cardinality="1"><ObjectProperty IRI="r6"></ObjectProperty></ObjectMaxCardinality>
  </ObjectIntersectionOf>
</SubClassOf>
<SubClassOf><Class IRI="MobileCall"></Class><Class IRI="PhoneCall"></Class></SubClassOf>
<SubClassOf>
  <Class abbreviatedIRI="Thing"></Class>
  <ObjectIntersectionOf>
    <ObjectAllValuesFrom>
      <ObjectProperty IRI="r8"></ObjectProperty><Class IRI="MobileCall"></Class>
    </ObjectAllValuesFrom>
    <ObjectAllValuesFrom>
      <ObjectInverseOf><ObjectProperty IRI="r8"></ObjectProperty></ObjectInverseOf>
    <Class IRI="CellPhone"></Class>
    </ObjectAllValuesFrom>
  </ObjectIntersectionOf>
</SubClassOf>
<SubClassOf><Class IRI="CellPhone"></Class><Class IRI="Phone"></Class></SubClassOf>
<SubClassOf><Class IRI="FixedPhone"></Class><Class IRI="Phone"></Class></SubClassOf>
<SubClassOf>
  <Class IRI="CellPhone"></Class>
  <ObjectComplementOf><Class IRI="FixedPhone"></Class></ObjectComplementOf>
</SubClassOf>
<SubClassOf>
  <Class IRI="Phone"></Class>
  <ObjectUnionOf><Class IRI="CellPhone"></Class><Class IRI="FixedPhone"></Class></ObjectUnionOf>
</SubClassOf>
\end{verbatim}
  \caption{Transformación del modelo de la Figura \ref{fig:mod_con_con} a XML OWLlink.}
  \label{fig:ej_mod_owl}
\end{figure}

\subsection{Incorporación de las Consultas}
\label{sec:apendice_inc_cosultas}
Posteriormente el módulo \texttt{Generador de Consultas} completa el OWL 2 con consultas OWLlink. La Figura \ref{fig:ej_mod_queries} muestra las consultas incorporadas. Finalmente, se completa el OWLlink incorporando las etiquetas XML restantes que se observan en la Figura \ref{fig:ej_mod_owllink_final}, donde cada comentario XML son sustituidos por los códigos respectivos. 

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
<IsKBSatisfiable kb="http://localhost/kb1"></IsKBSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="PhoneBill"></owl:Class></IsClassSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="PhoneCall"></owl:Class></IsClassSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="Phone"></owl:Class></IsClassSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="MobileCall"></owl:Class></IsClassSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="CellPhone"></owl:Class></IsClassSatisfiable>
<IsClassSatisfiable kb="http://localhost/kb1"><owl:Class IRI="FixedPhone"></owl:Class></IsClassSatisfiable>
\end{verbatim}
  
  \caption{Consultas a realizarse para el modelo de la Figura \ref{fig:mod_con_con} en OWLlink.}
\label{fig:ej_mod_queries}
\end{figure}

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<RequestMessage xmlns="http://www.owllink.org/owllink#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.owllink.org/owllink# http://www.owllink.org/owllink-20091116.xsd">
    <CreateKB kb="http://localhost/kb1"></CreateKB>
    <Tell kb="http://localhost/kb1">
        <!-- Representación del modelo en OWL 2. -->
    </Tell>
    <!-- OWLlink escrito por el usuario. -->
    <!-- Consultas OWLlink al razonador. -->
</RequestMessage>
\end{verbatim}
  \caption{Template general para localizar las distintas secciones dentro del documento OWLlink.}
  \label{fig:ej_mod_owllink_final}
\end{figure}

\subsection{Respuesta del Razonador y Análisis de la Misma}
El razonador recibe como entrada todo el OWLlink generado, procesando las consultas completas y emitiendo la respuesta de la Figura \ref{fig:ej_mod_resp}. Éste es procesado junto con las consultas de la Figura \ref{fig:ej_mod_queries} en el módulo \texttt{Analizador de Respuestas} generando una salida JSON de la Figura \ref{fig:ej_mod_json_resp}, que será enviada al cliente.

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<ResponseMessage xmlns="http://www.owllink.org/owllink#"
    xmlns:owl="http://www.w3.org/2002/07/owl#">
    <KB kb="http://localhost/kb1"></KB>
    <OK></OK>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
</ResponseMessage>
\end{verbatim}
  \caption{Respuesta del razonador ante las consultas de la Figura \ref{fig:ej_mod_queries}.}
  \label{fig:ej_mod_resp}
\end{figure}


\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
{"satisfiable":{"kb":true, "classes": [
     "PhoneBill","PhoneCall", "Phone","MobileCall",
     "CellPhone","FixedPhone"]},
   "unsatisfiable":{"classes":[]},
   "suggestions":{"links":[]},
   "reasoner":{
     "input":"XML OWLlink que recibe el razonador.",
     "output":"XML OWLlink que responde el razonador."}}
\end{verbatim}
  \caption{JSON de respuesta para el cliente procesado a partir de los datos de la Figura \ref{fig:ej_mod_resp}.}
  \label{fig:ej_mod_json_resp}
\end{figure}

\section{Ejemplo Insatisfacible}
Este ejemplo es similar al anterior, pero incorpora una generalización entre las clases ``CellPhone'' y ``FixedPhone'' como ilustra la Figura \ref{fig:ej_insatisfacible}. En las siguientes secciones se presentan las diferencias y los códigos completos de entrada y salida para cada módulo.

\subsection{Modelo JSON Mantenido por El Cliente}
En la Figura \ref{fig:ej_insatisfacible_json} se muestra el retazo de código necesario para incorporar la generalización entre ``CellPhone'' y ``FixedPhone'', y  a continuación, el código completo para enviarse al servidor.

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
     // --------------------------------------------------
     // Insertado:
     {"name":"r10","classes":["CellPhone"],
      "multiplicity":null,"type":"generalization","parent":"FixedPhone","constraint":[]}],
     // --------------------------------------------------
\end{verbatim}
  
  \begin{minipage}{0.45\textwidth}
\begin{verbatim}
{"classes":[  
  {"name":"PhoneBill","attrs":[],"methods":[],
   "position":{"x":20,"y":20}},
  {"name":"PhoneCall","attrs":[],"methods":[],
   "position":{"x":352,"y":28}},
  {"name":"Phone","attrs":[],"methods":[],
   "position":{"x":685,"y":28}},
  {"name":"MobileCall","attrs":[],"methods":[],
   "position":{"x":352,"y":191}},
  {"name":"CellPhone","attrs":[],"methods":[],
   "position":{"x":608,"y":183}},
  {"name":"FixedPhone","attrs":[],"methods":[],
   "position":{"x":780,"y":187}}],
\end{verbatim}
  \end{minipage}
  \begin{minipage}{0.45\textwidth}
\begin{verbatim}
"links":[
  {"name":"r5",
   "classes":["PhoneBill","PhoneCall"],
   "multiplicity":["1..1","1..*"],
   "type":"association"},
  {"name":"r6",
   "classes":["PhoneCall","Phone"],
   "multiplicity":[null,"1..1"],
   "type":"association"},
  {"name":"r7",
   "classes":["MobileCall"],
   "multiplicity":null,"type":"generalization",
   "parent":"PhoneCall","constraint":[]},
  {"name":"r8",
   "classes":["MobileCall","CellPhone"],
   "multiplicity":[null,null],
   "type":"association"},
  {"name":"r9",
   "classes":["CellPhone","FixedPhone"],
   "multiplicity":null,"type":"generalization",
   "parent":"Phone",
   "constraint":["disjoint","covering"]}
  {"name":"r10","classes":["CellPhone"],
   "multiplicity":null,
   "type":"generalization",
   "parent":"FixedPhone","constraint":[]}],
"owllink":""}
\end{verbatim}
    \end{minipage}
  \caption{Retazo de código JSON insertado para representar la generalización agregada a la Figura \ref{fig:ej_satis} y el código resultante.}
  \label{fig:ej_insatisfacible_json}
\end{figure}

\subsection{Representación OWL 2}
El código XML a introducirse al razonador también sufre modificaciones, puesto que la nueva generalización también debe ser representada en lógica descriptiva. La Figura \ref{fig:ej_insatisfacible_xml_in} muestra estas modificaciones donde sólo incorpora tres líneas al final representando la siguiente sentencia \DL{} respetando el método de traducción utilizado por el prototipo: $CellPhone \sqsubseteq FixedPhone$.

\begin{figure}[H]
  \centering
  \scriptsize  
\begin{verbatim}
<!-- [...] -->
<SubClassOf><Class IRI="CellPhone"></Class><Class IRI="Phone"></Class></SubClassOf>
<SubClassOf><Class IRI="FixedPhone"></Class><Class IRI="Phone"></Class></SubClassOf>
<SubClassOf>
    <Class IRI="CellPhone"></Class>
    <ObjectComplementOf><Class IRI="FixedPhone"></Class></ObjectComplementOf>
</SubClassOf>
<SubClassOf>
    <Class IRI="Phone"></Class>
    <ObjectUnionOf><Class IRI="CellPhone"></Class><Class IRI="FixedPhone"></Class></ObjectUnionOf>
</SubClassOf>
<!-- Se inserta el siguiente código: -->
<SubClassOf>
    <Class IRI="CellPhone"></Class><Class IRI="FixedPhone"></Class>
</SubClassOf>
<!-- Final de la sección OWL 2 -->
\end{verbatim}
  \caption{Código OWl 2 insertado para representar la modificación de la Figura \ref{fig:ej_insatisfacible}.}
  \label{fig:ej_insatisfacible_xml_in}
\end{figure}

\subsection{Respuesta del Razonador y Análisis de la Misma}
El razonador responderá de manera similar a la Figura \ref{fig:ej_mod_resp}, exceptuando por la consistencia en la clase ``CellPhone'', la cual retorna como falso. Las consultas son las mismas que las anteriores (Figura \ref{fig:ej_mod_queries} puesto que no hay modificaciones en la cantidad de clases. El módulo \texttt{Analizador de Respuestas} indica esta diferencia agregando la clase al conjunto del campo ``unsatisfiable''.

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<ResponseMessage xmlns="http://www.owllink.org/owllink#"
    xmlns:owl="http://www.w3.org/2002/07/owl#">  
    <KB kb="http://localhost/kb1"></KB>
    <OK></OK>
    <BooleanResponse result="true"  warning=
"Unsatisfiable classes: (*BOTTOM* BOTTOM file:///var/www/html/wicom/run/input-file.owllinkCellPhone)">
    </BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse> 
    <BooleanResponse result="false"></BooleanResponse>
    <BooleanResponse result="true"></BooleanResponse>
</ResponseMessage>
\end{verbatim}
  \caption{Respuesta del razonador ante la consulta de satisfacibilidad correspondiente al modelo de la Figura \ref{fig:ej_insatisfacible}.}
  \label{fig:ej_insatisfacible_out}
\end{figure}

\begin{figure}[H]
  \centering
  \scriptsize
\begin{verbatim}
{"satisfiable":{"kb":true, "classes": [
     "PhoneBill","PhoneCall","Phone","MobileCall",
     "FixedPhone"]},
   "unsatisfiable":{"classes":["CellPhone"]},
   "suggestions":{"links":[]},
   "reasoner":{
     "input":"XML OWLlink que recibe el razonador.",
     "output":"XML OWLlink que responde el razonador."}}
\end{verbatim}
  \caption{Texto en formato JSON producida a partir de la respuesta del razonador de la Figura \ref{fig:ej_insatisfacible_out}}
  \label{fig:ej_insatisfacible_json_resp}
\end{figure}



%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../tesis.tex"
%%% TeX-PDF-mode: t
%%% coding: utf-8
%%% End: 
