{"id":1033,"date":"2026-05-19T12:17:57","date_gmt":"2026-05-19T10:17:57","guid":{"rendered":"https:\/\/blogs.ugr.es\/tecweb\/?p=1033"},"modified":"2026-05-27T08:16:22","modified_gmt":"2026-05-27T06:16:22","slug":"protege-paso-a-paso-guia-basica-para-crear-ontologias-en-owl","status":"publish","type":"post","link":"https:\/\/blogs.ugr.es\/tecweb\/protege-paso-a-paso-guia-basica-para-crear-ontologias-en-owl\/","title":{"rendered":"Prot\u00e9g\u00e9 paso a paso: gu\u00eda b\u00e1sica para crear ontolog\u00edas"},"content":{"rendered":"<div class=\"prose dark:prose-invert inline leading-relaxed break-words min-w-0 [word-break:break-word] prose-strong:font-bold [&amp;_&gt;*:first-child]:mt-0 [&amp;_&gt;*:last-child]:mb-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Llevo a\u00f1os hablando en clase de ontolog\u00edas, grafos de conocimiento y de lo importante que es modelar bien la informaci\u00f3n, y siempre acabamos en la pizarra con dibujitos raros que prometo que tienen sentido. As\u00ed que en esta entrada vamos a bajar a tierra el tema usando Prot\u00e9g\u00e9, que es uno de esos programas feos (por no decir antip\u00e1ticos) pero bastante imprescindibles para construir ontolog\u00edas en la vida real.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Esto no va de hacer un manual exhaustivo de Prot\u00e9g\u00e9 (para eso ya est\u00e1 el famoso \u201c<a href=\"http:\/\/owl.cs.manchester.ac.uk\/publications\/talks-and-tutorials\/protg-owl-tutorial\/\" target=\"_blank\" rel=\"noopener\">manual de pizzas<\/a>\u201d y miles de tutoriales en YouTube), sino que te suene qu\u00e9 es una ontolog\u00eda en Prot\u00e9g\u00e9, qu\u00e9 pinta tienen las clases, las propiedades y las restricciones, y que puedas seguir un ejemplo sencillo sin morir en el intento. Con eso, para una asignatura como esta, vamos m\u00e1s que servidos.<\/p>\n<\/div>\n<div class=\"prose dark:prose-invert inline leading-relaxed break-words min-w-0 [word-break:break-word] prose-strong:font-bold [&amp;_&gt;*:first-child]:mt-0 [&amp;_&gt;*:last-child]:mb-0\">\n<h2><\/h2>\n<h2 id=\"qu-es-protg-y-para-qu-lo-vamos-a-usar\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Qu\u00e9 es Prot\u00e9g\u00e9 y para qu\u00e9 lo vamos a usar<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><a href=\"https:\/\/protege.stanford.edu\/\" target=\"_blank\" rel=\"noopener\">Prot\u00e9g\u00e9<\/a> es un editor de ontolog\u00edas desarrollado por la Universidad de Stanford que permite trabajar con OWL y RDF(S) sin tener que escribir todo a mano en sintaxis rara. Te da una interfaz gr\u00e1fica donde vas definiendo clases, propiedades y axiomas, y luego puedes pasarle un razonador por encima para comprobar si lo que has hecho tiene sentido o has creado un peque\u00f1o monstruo l\u00f3gico.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">En este contexto, lo vamos a usar como laboratorio: un sitio donde experimentar con c\u00f3mo pasar de \u201ctengo un dominio en la cabeza\u201d a \u201ctengo una ontolog\u00eda que una m\u00e1quina puede interpretar m\u00ednimamente bien\u201d. Nada de construir el pr\u00f3ximo esquema de Google, s\u00f3lo un modelo decente para entender el proceso.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"antes-de-abrir-protg-decide-de-qu-va-tu-ontologa\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Antes de abrir Prot\u00e9g\u00e9: decide de qu\u00e9 va tu ontolog\u00eda<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Antes de lanzarte a crear clases como si no hubiera ma\u00f1ana, merece la pena dedicar cinco minutos a responder tres preguntas muy simples:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">\u00bfDe qu\u00e9 va mi ontolog\u00eda (el dominio)?<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">\u00bfPara qu\u00e9 la quiero (qu\u00e9 tipo de consultas deber\u00eda responder)?<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">\u00bfQu\u00e9 no voy a modelar ahora para no complicarme la vida?<\/p>\n<\/li>\n<\/ul>\n<p>Si lo que quieres es aprender a construir el vocabulario relacionado con el dominio que te interesa, lo mejor es que leas <a href=\"https:\/\/www.researchgate.net\/publication\/233733614_Metodolog&apos;ia_para_la_estructuracion_del_conocimiento_de_una_disciplina_el_caso_de_PuertoTerm\" target=\"_blank\" rel=\"noopener\">este art\u00edculo<\/a> que escrib\u00ed hace a\u00f1os. En \u00e9l cuento, de forma sencilla, los pasos que hay que dar para obtener un vocabulario especializado en una \u00e1rea tem\u00e1tica concreta. Una vez que tengas los t\u00e9rminos, solo falta vincularlos. Y eso es lo que hace una ontolog\u00eda.<\/p>\n<p>Para esta entrada podr\u00edamos, por ejemplo, hacer una ontolog\u00eda m\u00ednima sobre la propia asignatura: asignaturas, estudiantes, profesorado y trabajos entregados (prefiero hacer esta primera ontolog\u00eda de algo sencillo, que todos conozcamos, para que resulte m\u00e1s sencilla su comprensi\u00f3n). No vamos a modelar toda la universidad, ni todos los grados, ni la vida acad\u00e9mica completa del estudiante; s\u00f3lo lo justo para hacer algunas preguntas interesantes.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"crear-el-proyecto-en-protg\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Crear el proyecto en Prot\u00e9g\u00e9<\/h2>\n<p>Puedes trabajar con el editor de dos formas:<\/p>\n<ul>\n<li>O te <a href=\"https:\/\/protege.stanford.edu\/software.php#desktop-protege\" target=\"_blank\" rel=\"noopener\">lo descargas de aqu\u00ed<\/a> y lo instalas en tu ordenador. Es decir, trabajas en modo local.<\/li>\n<li>O trabajas en modo online conect\u00e1ndote a la <a href=\"https:\/\/webprotege.stanford.edu\/\" target=\"_blank\" rel=\"noopener\">versi\u00f3n WebProt\u00e9g\u00e9<\/a>.<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Cuando abras Prot\u00e9g\u00e9, lo normal es crear un proyecto nuevo en OWL (OWL ontology);<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Nuevo proyecto \u2192 OWL ontology.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Si est\u00e1s en la versi\u00f3n en local te pedir\u00e1 que elijas una IRI. Puedes poner, por ejemplo, algo tipo <code>https:\/\/blogs.ugr.es\/tecweb\/ontologias\/curso2026<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Guarda el archivo en una carpeta donde luego lo encuentres (si est\u00e1s con la opci\u00f3n local).<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">A partir de ah\u00ed tendr\u00e1s varias pesta\u00f1as importantes: <strong>Classes<\/strong>, <strong>Object properties<\/strong>, <strong>Data properties<\/strong>, <strong>Individuals<\/strong> y alguna m\u00e1s donde viven los axiomas y las anotaciones.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"paso-1-sacar-la-lista-de-conceptos-clases\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 1: sacar la lista de conceptos (clases)<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Volvemos al ejemplo de la asignatura. Queremos modelar, como m\u00ednimo:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Asignatura<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Estudiante<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Profesor<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Trabajo<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Cuando hablamos de clases en una ontolog\u00eda, en realidad estamos hablando de categor\u00edas de cosas: conjuntos de individuos que comparten unas caracter\u00edsticas m\u00ednimas. Asignatura, Estudiante o Trabajo no son \u201ccosas concretas\u201d, sino etiquetas para agrupar muchas instancias posibles que se parecen lo suficiente entre s\u00ed como para tratarlas igual en el modelo. Una vez tienes claras esas clases, ya puedes empezar a decir qu\u00e9 relaciones hay entre ellas y qu\u00e9 propiedades tiene cada una.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">En la pesta\u00f1a <strong>Classes<\/strong> ir\u00edas creando algo como:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Persona<\/code><\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Estudiante<\/code><\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Profesor<\/code><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Asignatura<\/code><\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Trabajo<\/code><\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Con eso ya tienes el esqueleto de tu ontolog\u00eda.<\/p>\n<\/div>\n<p><a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-160620.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-1346\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-160620-700x643.jpg\" alt=\"\" width=\"700\" height=\"643\" srcset=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-160620-700x643.jpg 700w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-160620-300x276.jpg 300w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-160620.jpg 800w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"prose dark:prose-invert inline leading-relaxed break-words min-w-0 [word-break:break-word] prose-strong:font-bold [&amp;_&gt;*:first-child]:mt-0 [&amp;_&gt;*:last-child]:mb-0\">\n<h2 id=\"paso-2-definir-relaciones-propiedades-de-objeto\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 2: definir relaciones (propiedades de objeto)<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Ahora necesitamos contar c\u00f3mo se relacionan esas clases entre s\u00ed. Aqu\u00ed entran las <strong>Object properties<\/strong>. En una ontolog\u00eda, las object properties son simplemente relaciones entre individuos: conectan una cosa con otra cosa. Si digo que <em>Estudiante01<\/em> <em>matriculadoEn<\/em> <em>TecWeb2026<\/em>, esa relaci\u00f3n <em>matriculadoEn<\/em> es una propiedad de objeto que une un individuo de la clase <em>Estudiante<\/em> con un individuo de la clase <em>Asignatura<\/em>. A diferencia de las propiedades de datos, que van de un individuo a un valor literal (un n\u00famero, una fecha, una cadena de texto), las propiedades de objeto siempre enlazan dos instancias de clases de la ontolog\u00eda.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Siguiendo el ejemplo, podr\u00edamos definir cosas como:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>imparte<\/code> (dominio: <code>Profesor<\/code>, rango: <code>Asignatura<\/code>)<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>matriculadoEn<\/code> (dominio: <code>Estudiante<\/code>, rango: <code>Asignatura<\/code>)<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>entrega<\/code> (dominio: <code>Estudiante<\/code>, rango: <code>Trabajo<\/code>)<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">En la pesta\u00f1a <strong>Object properties<\/strong> creas cada propiedad, le das nombre, y en la parte de dominio y rango indicas qu\u00e9 clases conecta. S\u00f3lo con esto ya se puede empezar a razonar sobre qui\u00e9n puede hacer qu\u00e9 en tu peque\u00f1o mundo.<\/p>\n<\/div>\n<p><a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-161615.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-1348\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-161615-700x451.jpg\" alt=\"\" width=\"700\" height=\"451\" srcset=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-161615-700x451.jpg 700w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-161615-300x193.jpg 300w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-161615.jpg 800w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Adem\u00e1s de decir qu\u00e9 clases conecta una propiedad de objeto, en OWL podemos indicar algunas caracter\u00edsticas especiales que afectan a la inferencia. Por ejemplo, una propiedad\u00a0<strong>funcional<\/strong>\u00a0es aquella de la que s\u00f3lo puede haber un valor por individuo (si\u00a0<code>TecWeb2026 tieneCoordinador JoseSenso<\/code>\u00a0y la propiedad\u00a0<code>tieneCoordinador<\/code>\u00a0es funcional, no puede haber dos coordinadores distintos a la vez). Una propiedad\u00a0<strong>inversa funcional<\/strong>\u00a0impone la restricci\u00f3n en sentido contrario: cada valor s\u00f3lo puede pertenecer a un individuo, como ocurrir\u00eda con algo tipo\u00a0<code>tieneNumeroExpediente<\/code>\u00a0si lo model\u00e1ramos como propiedad de objeto sobre un recurso \u201cExpediente\u201d.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Tambi\u00e9n hay propiedades\u00a0<strong>transitivas<\/strong>\u00a0(si\u00a0<code>A precede B<\/code>\u00a0y\u00a0<code>B precede C<\/code>, entonces\u00a0<code>A precede C<\/code>),\u00a0<strong>sim\u00e9tricas<\/strong>\u00a0(si\u00a0<code>A esHermanoDe B<\/code>, entonces\u00a0<code>B esHermanoDe A<\/code>) o\u00a0<strong>asim\u00e9tricas<\/strong>\u00a0(si\u00a0<code>A esHijoDe B<\/code>, nunca ser\u00e1 cierto que\u00a0<code>B esHijoDe A<\/code>). Para una primera ontolog\u00eda en Prot\u00e9g\u00e9 suele bastar con entender bien las funcionales, inversas y, como mucho, marcar alguna propiedad como transitiva o sim\u00e9trica cuando el significado lo pida claramente.<\/p>\n<p>&nbsp;<\/p>\n<div class=\"prose dark:prose-invert inline leading-relaxed break-words min-w-0 [word-break:break-word] prose-strong:font-bold [&amp;_&gt;*:first-child]:mt-0 [&amp;_&gt;*:last-child]:mb-0\">\n<h2 id=\"paso-3-aadir-datos-propiedades-de-datos\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 3: a\u00f1adir datos (propiedades de datos)<\/h2>\n<p>Por contraste, las data properties conectan un individuo con un valor literal: <em>Estudiante01 tieneEmail \u00abalguien&#64;co&#114;&#114;&#101;&#111;&#46;&#117;&#103;&#114;&#46;&#101;&#115;\u00bb<\/em> o <em>Trabajo1_TecWeb tieneCalificacion 9.5<\/em> usan propiedades que no llevan a otra cosa del modelo, sino a datos b\u00e1sicos como cadenas de texto, n\u00fameros o fechas.<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>tieneNombre<\/code> (dominio: <code>Persona<\/code>, rango: <code>xsd:string<\/code>)<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>tieneEmail<\/code> (dominio: <code>Persona<\/code>, rango: <code>xsd:string<\/code>)<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>tieneCalificacion<\/code> (dominio: <code>Trabajo<\/code>, rango: <code>xsd:decimal<\/code>)<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>tieneFechaEntrega<\/code> (dominio: <code>Trabajo<\/code>, rango: <code>xsd:dateTime<\/code>)<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><a href=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-162106.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-1350\" src=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-162106-700x431.jpg\" alt=\"\" width=\"700\" height=\"431\" srcset=\"https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-162106-700x431.jpg 700w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-162106-300x185.jpg 300w, https:\/\/blogs.ugr.es\/tecweb\/wp-content\/uploads\/sites\/55\/2026\/03\/Captura-de-pantalla-2026-03-17-162106.jpg 800w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"prose dark:prose-invert inline leading-relaxed break-words min-w-0 [word-break:break-word] prose-strong:font-bold [&amp;_&gt;*:first-child]:mt-0 [&amp;_&gt;*:last-child]:mb-0\">\n<h2 id=\"paso-4-poner-un-poco-de-disciplina-restricciones\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 4: poner un poco de disciplina (restricciones)<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Hasta ahora s\u00f3lo hemos dicho \u201cexisten estas cosas\u201d y \u201cse pueden relacionar as\u00ed\u201d. Si quieres que la ontolog\u00eda empiece a tener algo de car\u00e1cter, necesitas restricciones m\u00ednimas:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Una <code>Asignatura<\/code> deber\u00eda estar impartida por al menos un <code>Profesor<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un <code>Trabajo<\/code> deber\u00eda estar relacionado con al menos un <code>Estudiante<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">En Prot\u00e9g\u00e9, esto se expresa con restricciones de cardinalidad y existenciales, del estilo \u201ccada Asignatura <strong>tiene al menos un<\/strong> Profesor que la imparte\u201d. No te preocupes por la notaci\u00f3n formal la primera vez; c\u00e9ntrate en que la frase en lenguaje natural tenga sentido y luego trad\u00facela a la interfaz.<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"paso-5-crear-individuos-y-probar-el-modelo\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 5: crear individuos y probar el modelo<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Llega el momento de poner nombres propios: en la pesta\u00f1a\u00a0<strong>Individuals<\/strong> puedes crear instancias concretas de tus clases.\u00a0 Una instancia es un ejemplo concreto de una clase dentro de una ontolog\u00eda. En vez de un ejemplo gen\u00e9rico, vamos a usar directamente cosas de la asignatura.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Por ejemplo:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un individuo\u00a0<code>TecWeb2026<\/code>\u00a0de tipo\u00a0<code>Asignatura<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un individuo\u00a0<code>BlogGrupoA<\/code>\u00a0de tipo\u00a0<code>RecursoWeb<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un individuo\u00a0<code>Trabajo1_TecWeb<\/code>\u00a0de tipo\u00a0<code>Trabajo<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un individuo\u00a0<code>Estudiante01<\/code>\u00a0de tipo\u00a0<code>Estudiante<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Un individuo\u00a0<code>JoseSenso<\/code>\u00a0de tipo\u00a0<code>Profesor<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Despu\u00e9s puedes ir asignando propiedades entre ellos:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>JoseSenso imparte TecWeb2026<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Estudiante01 matriculadoEn TecWeb2026<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Estudiante01 entrega Trabajo1_TecWeb<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Trabajo1_TecWeb usaRecurso BlogGrupoA<\/code>.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\"><code>Trabajo1_TecWeb implementaTecnologia CMS<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Aqu\u00ed es donde se ve si todo lo anterior era razonable o si empiezan a salir cosas raras: si el modelo est\u00e1 bien montado, Prot\u00e9g\u00e9 no deber\u00eda quejarse de que un\u00a0<code>Trabajo<\/code>\u00a0use un\u00a0<code>RecursoWeb<\/code> relacionado con la asignatura, ni de que un <code>Estudiante<\/code>\u00a0entregue ese trabajo dentro de\u00a0<code>Asignatura<\/code>. Si algo no encaja, el propio editor (o el razonador, en el siguiente paso) te lo har\u00e1 saber.<\/p>\n<h2><\/h2>\n<h2 id=\"paso-6-encender-el-razonador-y-ver-qu-pasa\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Paso 6: encender el razonador y ver qu\u00e9 pasa<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Una de las gracias de usar Prot\u00e9g\u00e9 es poder lanzar un razonador (HermiT, Pellet, etc.) para ver si tu ontolog\u00eda es consistente.<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Activa el razonador.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Deja que recalcule la jerarqu\u00eda de clases.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Comprueba si aparecen clases \u201cinconsistentes\u201d o si hay individuos que acaban en sitios donde no esperabas.<\/p>\n<\/li>\n<\/ul>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Si algo est\u00e1 mal modelado, el razonador suele chivarse con alguna clase en rojo o avisos de que has creado algo imposible (al estilo \u201cuna asignatura que no puede tener profesor, pero a la vez debe tener al menos uno\u201d).<\/p>\n<p>&nbsp;<\/p>\n<h2 id=\"y-ahora-qu-hago-con-esta-ontologa\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Y ahora, \u00bfqu\u00e9 hago con esta ontolog\u00eda?<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">A estas alturas, con que entiendas el flujo completo ya me doy por satisfecho. Deber\u00edas tener claro el proceso para:<\/p>\n<ol class=\"marker:text-quiet list-decimal\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Decidir el dominio y el objetivo.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Definir clases.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">A\u00f1adir propiedades de objeto y de datos.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Poner algunas restricciones sensatas.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Crear individuos y probar.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Pasar el razonador y arreglar lo que haga falta.<span class=\"group\/trigger inline-flex min-w-0\" data-state=\"closed\"><span class=\"citation inline\"><span class=\"relative -mt-px max-w-full min-w-0 whitespace-nowrap -top-px font-sans text-base text-foreground select-none selection:bg-super\/50 selection:text-foreground dark:selection:bg-super\/10 dark:selection:text-super\"><span class=\"text-3xs rounded-badge group min-w-4 max-w-full cursor-pointer text-center align-middle font-mono tabular-nums font-normal transition-colors duration-150 inline-flex items-center py-[0.1875rem] leading-snug px-[0.3rem] [@media(hover:hover)]:hover:bg-subtle group-data-[state=open]\/trigger:bg-subtle border-subtlest ring-subtlest divide-subtlest bg-quiet\"><span class=\"inline-block relative !mt-0 ![vertical-align:unset] max-w-[25ch] overflow-hidden\">dte.us<\/span><span class=\"inline-block ml-xs mr-px !mt-0 ![vertical-align:unset]\"><span class=\"opacity-50\">+1<\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<\/li>\n<\/ol>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Si quisieras ir m\u00e1s all\u00e1, a partir de aqu\u00ed podr\u00edas:<\/p>\n<ul class=\"marker:text-quiet list-disc\">\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Publicar la ontolog\u00eda en la web.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Vincularla con otros vocabularios ya existentes.<\/p>\n<\/li>\n<li class=\"py-0 my-0 prose-p:pt-0 prose-p:mb-2 prose-p:my-0 [&amp;&gt;p]:pt-0 [&amp;&gt;p]:mb-2 [&amp;&gt;p]:my-0\">\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Usarla como base para consultas SPARQL sobre datos anotados con ella.<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2 id=\"para-seguir-trasteando\" class=\"font-editorial font-bold mb-2 mt-4 [.has-inline-images_&amp;]:clear-end text-lg first:mt-0 md:text-lg [hr+&amp;]:mt-4\">Para seguir trasteando<\/h2>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Si despu\u00e9s de esto Prot\u00e9g\u00e9 no te da demasiada pereza, te recomiendo echar un ojo a alg\u00fan tutorial paso a paso (hay varios en espa\u00f1ol bastante decentes) y a ejemplos cl\u00e1sicos como el de las pizzas, que usan justo para ense\u00f1ar OWL desde cero. Tambi\u00e9n es buena idea mirar cat\u00e1logos de vocabularios como <a href=\"https:\/\/bartoc.org\/\" target=\"_blank\" rel=\"noopener\">BARTOC<\/a> para ver c\u00f3mo otra gente modela dominios parecidos al tuyo antes de reinventar la rueda.<\/p>\n<p class=\"my-2 [&amp;+p]:mt-4 [&amp;_strong:has(+br)]:inline-block [&amp;_strong:has(+br)]:pb-2\">Si llegas hasta aqu\u00ed sin odiar Prot\u00e9g\u00e9, ya has hecho buena parte del camino. A partir de este punto, todo es iterar: probar, romper la ontolog\u00eda, mirar qu\u00e9 dice el razonador y volver a empezar. Si en alg\u00fan momento te ves tentado de tirar el port\u00e1til por la ventana, respira: incluso as\u00ed estar\u00e1s entendiendo muy bien c\u00f3mo funciona esto.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Llevo a\u00f1os hablando en clase de ontolog\u00edas, grafos de conocimiento y de lo importante que es modelar bien la informaci\u00f3n, y siempre acabamos en la pizarra con dibujitos raros que prometo que tienen sentido. As\u00ed que en esta entrada vamos a bajar a tierra el tema usando Prot\u00e9g\u00e9, que es uno de esos programas feos [&hellip;]<\/p>\n","protected":false},"author":65,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[20,15],"tags":[158,108,156,157],"class_list":["post-1033","post","type-post","status-publish","format-standard","category-arquitectura-de-la-informacion-web","category-la-web-semantica","tag-editores","tag-ontologias","tag-owl","tag-protege","entry","has-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts\/1033","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/comments?post=1033"}],"version-history":[{"count":3,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts\/1033\/revisions"}],"predecessor-version":[{"id":1364,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/posts\/1033\/revisions\/1364"}],"wp:attachment":[{"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/media?parent=1033"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/categories?post=1033"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugr.es\/tecweb\/wp-json\/wp\/v2\/tags?post=1033"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}