<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog sobre Administración de Contenidos (CMS) para Portales, Diarios, Revistas y Comunidades &#187; alkacon</title>
	<atom:link href="http://blog.tfsla.com/tag/alkacon/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tfsla.com</link>
	<description>Software de Administración de Contenidos, Facebook Apps, TV Widgets y tecnologías Internet</description>
	<lastBuildDate>Thu, 02 Feb 2012 20:02:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Cómo agregar contenido masivamente a Opencms?</title>
		<link>http://blog.tfsla.com/2009/05/como-agregar-contenido-masivamente-a-opencms/</link>
		<comments>http://blog.tfsla.com/2009/05/como-agregar-contenido-masivamente-a-opencms/#comments</comments>
		<pubDate>Fri, 22 May 2009 19:44:51 +0000</pubDate>
		<dc:creator>Hernán</dc:creator>
				<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[alkacon]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[opencms api]]></category>

		<guid isPermaLink="false">http://blog.tfsla.com/?p=51</guid>
		<description><![CDATA[Existente diversas situaciones ante las cuales nos vemos en la necesidad de volcar una cantidad importante contenido a una instancia de Opencms. El caso más común, la migración de contenido XML/HTML desde un sistema existente al sistema de archivos virtual de Opencms. A continuación, vamos a explicar un procedimiento sencillo y efectivo para incorporar contenido masivamente [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-78" title="836893611" src="http://blog.tfsla.com/wp-content/uploads/2009/05/836893611.jpg" alt="836893611" width="487" height="319" /></p>
<p>Existente diversas situaciones ante las cuales nos vemos en la necesidad de volcar una cantidad importante contenido a una instancia de Opencms. El caso más común, la migración de contenido XML/HTML desde un sistema existente al sistema de archivos virtual de Opencms.</p>
<p><span id="more-51"></span></p>
<p>A continuación, vamos a explicar un procedimiento sencillo y efectivo para incorporar contenido masivamente a Opencms.</p>
<ol>
<li>El primer paso de este procedimiento es la generación de un archivo ZIP con la estructura de directorio y archivos a incorporar a Opencms. Es muy importante tener en cuenta que esta misma estructura va a ser generada dentro del VFS.  </li>
<li>Una vez creado el archivo con el contenido a incorporar, ir al Workplace, vista de Explorador y hacer click sobre el botón UPLOAD. Seleccionar el archivo a subir y marcar la casilla que indica que el archivo a importar es un ZIP.</li>
</ol>
<p>Una vez aceptada la acción, el sistema creará de forma automática las carpetas e importará los archivos contenidos dentro del .ZIP determinando el content-type de acuerdo a la extensión de los archivos a procesar. Por ejemplo, cuando el .ZIP contiene archivos con extensión .JPG, los mismos serán incorporados a Opencms con el tipo &#8220;image&#8221;.</p>
<p>El mapeo de extensiones y tipos de archivos puede ser configurado en opencms-vfs.xml. Para esto, debemos ubicar el nodo &lt;resourcetype&gt; y estabecer las relaciones dentro de la sección &lt;mapping&gt;.</p>
<p>Para aquellos casos donde los archivos fueron subidos y no son reconocidos por Opencms como un tipo de contenido declarado, puede modificarse el content-type de forma programática mediante una JSP que utilice el siguiente método de CmsObject propio de la API de Opencms:</p>
<p><span style="color: #ff0000;">public void chtype(String resourcename, int type) throws CmsException</span></p>
<p>Éxitos en la importación de contenido!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tfsla.com/2009/05/como-agregar-contenido-masivamente-a-opencms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>11 razones por las cuales OPENCMS es la mejor solución de CMS para alto tráfico</title>
		<link>http://blog.tfsla.com/2009/05/11-razones-por-las-cuales-opencms-es-la-mejor-solucion-de-cms-para-alto-trafico/</link>
		<comments>http://blog.tfsla.com/2009/05/11-razones-por-las-cuales-opencms-es-la-mejor-solucion-de-cms-para-alto-trafico/#comments</comments>
		<pubDate>Mon, 11 May 2009 18:33:28 +0000</pubDate>
		<dc:creator>Hernán</dc:creator>
				<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[alkacon]]></category>
		<category><![CDATA[alto trafico]]></category>
		<category><![CDATA[diarios]]></category>
		<category><![CDATA[OCEE]]></category>
		<category><![CDATA[revistas]]></category>

		<guid isPermaLink="false">http://blog.tfsla.com/?p=13</guid>
		<description><![CDATA[En el mes de marzo del 2006 nuestra firma tuvo la necesidad de evaluar diferentes tecnologías de Administración de Contenidos (CMS) para el desarrollo de un Diario Online (www.perfil.com). En su momento, la evaluación nos llevó a OpenCMS (www.opencms.org). Recientemente hemos repetido ese proceso de evaluación incluyendo en la comparación productos como Drupal, Alfresco y [...]]]></description>
			<content:encoded><![CDATA[<p>En el mes de marzo del 2006 nuestra firma tuvo la necesidad de evaluar  diferentes tecnologías de Administración de Contenidos (CMS) para el desarrollo  de un <strong>Diario Online (</strong><a href="http://www.perfil.com"><strong>www.perfil.com</strong></a><strong>)</strong>.  En su momento, la evaluación nos llevó a OpenCMS (<a href="http://www.opencms.org">www.opencms.org</a>). Recientemente hemos  repetido ese proceso de evaluación incluyendo en la comparación productos como  <strong>Drupal, Alfresco y Dotnetnuke</strong> y los resultados nos han llevado  a mantener nuestra posición respecto de la línea a seguir para portales de alto  tráfico, diarios y revistas online.</p>
<p>A continuación, compartimos las 11 razones que nos llevaron a elegir OpenCMS  para la construcción de portales de <strong>alto tráfico</strong> como <a href="http://www.perfil.com">www.perfil.com</a>, <a href="http://www.lacapital.com.ar">www.lacapital.com.ar</a> y <a href="http://www.diariouno.net.ar">www.diariouno.net.ar</a>.</p>
<p><span id="more-13"></span></p>
<h2>1. Comunidad / Soporte</h2>
<p>Opencms cuenta con una importante comunidad de desarrollo, más de <strong>120  proveedores</strong> de soluciones a nivel mundial y más de <strong>5.000  casos</strong> de implementación en el mundo entre los cuales se encuentran: FOX  Australia, Dreamworks Animation, 3M, Renault y Bayer.</p>
<p>Posee módulos libres y comerciales provistos por terceras partes y por el  desarrollador del producto (Alkacon Software GmbH).</p>
<p>El soporte comercial de OpenCMS se brinda tanto por la empresa desarrolladora  de la solución (Alkacon Software) como a través de su red de proveedores de  soluciones.</p>
<h2>2. Gestión de Contenido</h2>
<p>La solución permite la utilización de múltiples tipos de contenido o definir  tipos propios a través de un modelo de propiedades y atributos extensible. Los  contenidos son persistidos en un <strong>sistema de archivos virtual  (VFS)</strong> y pueden ser entregados a los navegantes de forma  <strong>estática o dinámica</strong>. Nuestra firma ha extendido OpenCMS para  incorporar soporte a tipos de contenido como: <strong>Video Flash, Audio Flash,  PDF, Noticias, Carteleras</strong>, etc.</p>
<p>El modelo de carga es muy sencillo, pudiendo optar por múltiples editores,  tipos de contenido estructurados o carga programática. La opción por defecto es  un <strong>editor avanzado (FCKEditor</strong>). El editor de contenido puede  ser actualizado de forma independiente al resto de la plataforma permitiendo un  correcto desempeño con navegadores modernos.</p>
<p>OpenCMS posee soporte nativo de <strong>versionado automático</strong>,  permitiendo ver un historial completo de lo ocurrido con un elemento dentro del  sistema. Esto es sumamente importante en un entorno de redacción donde debe  llevarse cierto nivel de control sobre la evolución de una nota. Además, posee  soporte de “bloqueo” de contenido para permitir la <strong>colaboración entre  diferentes usuarios</strong> (símil check-in / check-out).</p>
<h2>3. Templates</h2>
<p>La construcción de templates dentro de la herramienta de CMS es una de las  barreras de entrada más fuertes que presentan muchas soluciones existentes en el  mercado actual.</p>
<p>La generación de templates a medida en OpenCMS puede realizarse utilizando  <strong>cualquier herramienta de diseño web HTML</strong> para su posterior  integración en páginas java (JSP), las cuales pueden ser construidas tomando  como base el templates nativo TEMPLATEONE.</p>
<p>La construcción de estos templates requiere <strong>conocimientos básicos de  Java, HTML / CSS</strong> y sólidos conocimientos de JSP, XML / XSD para  interactuar con funcionalidad dinámica construida por el usuario alrededor de  OpenCMS.</p>
<h2>4. Gestión de Imágenes</h2>
<p>La solución cuenta con un módulo nativo de gestión de imágenes que permite  subir archivos individuales, archivos ZIP para la <strong>carga de múltiples  elementos</strong>, ajuste de tamaño automático, y estatificación configurable a  nivel de elemento o carpetas. De esta forma puede servir el contenido visual  haciendo uso del cache nativo del servidor Web.<br />
Los usuarios pueden organizar  sus imágenes a nivel de Galerías temáticas o por fecha.</p>
<p>Para aquellos casos donde la gestión de activos visuales es un requerimiento  es posible realizar la integración con sistema de imágenes como CUMULUS. OpenCMS  posee uno de los casos más importantes de referencia: THE ROYAL LIBRARY.</p>
<h2>5. Rendimiento, Disponibilidad y Escalabilidad</h2>
<p>La problemática de los sitios de alto tráfico suele estar íntimamente  vinculada con la <strong>reducción del impacto</strong> en múltiples servidores  Web consultando el motor de base de datos. En este punto es importante definir  una estrategia para servir el contenido a los usuarios: dinámica o estático.  Afortunadamente OpenCMS puede trabajar con ambas y expone <strong>mecanismos de  cache diferenciados</strong> para cada caso.</p>
<p>OpenCMS presenta diferentes niveles de cache orientados a solucionar ese  problema en forma eficiente:<br />
1. <strong>FlexCache</strong>: realiza el cache  de las diferentes JSP y sus variantes<br />
2. <strong>OCEE Accelerator  (DB)</strong>: es un sistema de cache que tiene por objetivo reducir la cantidad  de consultas a la base de datos (VFS).<br />
3. <strong>Static Export (servir  estáticamente) + Modproxy</strong>: realiza el cacheo del contenido que fue  definido como estático a nivel del servidor Web Apache.</p>
<p>La FlexCache posee directivas avanzadas para la gestión de diferentes tipos  de contenido. En la versión 6.x se recrea en cada publicación mientras que en  versión 7.x la limpieza del cache se realiza a nivel de ítem. Por su parte el  OCEE Cache de base de datos persiste a través de las múltiples publicaciones y  sólo es renovado cuando el sistema se reinicia o los elementos expiran.</p>
<p>A diferencia de otras soluciones de CMS, la <strong>escalabilidad en  OpenCMS</strong> es provista a nivel de la aplicación OpenCMS Alkacon  <strong>OCEE Cluster</strong> que permite tener un servidor designado como  Workplace (Intranet) y múltiples servidores de frontera encargados de servir el  contenido a los navegantes. Este modelo posibilita una escalabilidad ilimitada y  alta disponibilidad a través de diferentes esquemas de implementación que  detallaremos en otro artículo.<br />
A nivel de base de datos OpenCMS ofrece las  opciones de mercado más reconocidas: MySQL, Microsoft SQL Server, PostgreSQL y  Oracle.</p>
<h2>6. Seguridad</h2>
<p>Los aspectos centrales de la seguridad son:<br />
1. Proteger el acceso a los  contenidos en preparación (externo)<br />
2. Administrar eficientemente el acceso  de usuarios (interno)</p>
<p>A nivel externo, el servidor de Workplace (también llamado Intranet de  publicación) puede existir sin necesidad de estar publicado en Internet. Es  recomendable además que este equipo disponga de conectividad independiente  (entre el servidor y los usuarios que acceden a él) para <strong>no competir por  ancho de banda</strong> con los servidores públicos retrasando la publicación de  nuevo contenido en situaciones de picos de alto tráfico.</p>
<p>A nivel interno, la seguridad se basa en modelo por <strong>listas de  acceso</strong> (ACL) en el Virtual File System a nivel de elemento. Asimismo se  brinda soporte para la gestión de soporte para grupos, roles y usuarios. OpenCMS  posee una extensión comercial OCEE LDAP para la integración con Servicios de  Directorio.</p>
<p>OpenCMS permite además tener un alto nivel de auditoría sobre las acciones de  los usuarios en el sistema mediante un “historial de proyecto’”a nivel de  recurso.</p>
<h2>7. Localización</h2>
<p>OpenCMS tiene <strong>soporte multi-idioma</strong>. Ofrece de forma nativa  las localizaciones para inglés y alemán. La comunidad ha desarrollado  localizaciones para español e italiano.</p>
<h2>8. Motor de Búsquedas</h2>
<p>La solución integra el producto Lucene Search Engine. A partir de una  extensión de OpenCMS, nuestra firma brinda <strong>soporte de búsquedas  avanzadas</strong>. Permite también la construcción de múltiples fuentes de  indexación permitiendo tener un modelo de búsqueda especializado por cada  índice.</p>
<p>Los índices de búsqueda pueden asociarse con <strong>tipos de  contenido</strong>, recursos y proyectos. La indexación se realiza por atributos  de los elementos como por ejemplo título, palabra clave, meta tag, categorías,  fecha de creación, fecha de publicación, edición, tipo de publicación, etc.</p>
<h2>9. Funcionalidad Interactiva</h2>
<p>La funcionalidad interactiva puede ser construida fácilmente como contenido  estructurado o como módulo que extienden a OpenCMS. Actualmente, se encuentran  disponibles módulos para:</p>
<ul>
<li>Registración y Autenticación de Usuarios Web</li>
<li>Valoración de Contenido</li>
<li>Comentarios y Reporte de Abuso</li>
<li>Suscripción y Administración de Newsletter</li>
<li>Opiniones (símil Foro)</li>
<li>Recomendación de contenido</li>
<li>Múltiples tipos de Rankings para los navegantes</li>
<li>RSS para sindicar contenido</li>
<li>Gestor de Encuestas</li>
<li>Etc (<a href="http://www.tfsla.com/productos_opencms_modulos.php">http://www.tfsla.com/productos_opencms_modulos.php</a>)</li>
</ul>
<h2>10. API de Integración y Extensión</h2>
<p>OpenCMS expone <strong>abiertamente todo su código</strong> (excluyendo las  extensiones comerciales) permitiendo a los usuarios tener una versión  personalizada del CMS y extender el mismo. El acceso a la funcionalidad básica  puede realizarse a través de la Core Build API.</p>
<p>El conocimiento disponible sobre el desarrollo se encuentra muy bien  documentado y disponible en <a href="http://www.opencms.org">www.opencms.org</a>, Online Javadoc y el  repositorio CVS.</p>
<h2>11. Separación de Entornos</h2>
<p>La separación tradicional de entornos incluye <em>desarrollo</em>,  <em>pruebas</em> y <em>producción</em>. En OpenCMS es posible alcanzar esta  separación de diferentes formas:</p>
<p>La primera, consiste en tener un <strong>servidor de desarrollo con las  extensiones OCEE</strong> instaladas en modo desarrollo lo cual nos permite  trabajar en un entorno prácticamente idéntico al productivo. Una vez terminado  el desarrollo, el módulo completo puede ser <strong>exportado e  importado</strong> en el nuevo servidor.</p>
<p>La segunda forma implica la utilización del <strong>OCEE Replicator</strong> para enviar la información del servidor de desarrollo al servidor de producción  de forma automática.</p>
<p>La tercera forma, aunque la menos recomendada pero apta para situaciones  particulares, considera el despliegue de OpenCMS en diferentes servidores (N) y  el consumo de 2 o más bases de datos. A idéntico sistema de archivos de los  servidores, la única diferencia posible es el <strong>contenido del sistema de  archivos virtual</strong> (VFS). El VFS vive dentro de una base de datos que  puede <strong>replicarse de forma manual</strong> o automática y lograr que otro  servidor, consumiendo esta base “esclava”, obtenga la misma funcionalidad que la  primera.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tfsla.com/2009/05/11-razones-por-las-cuales-opencms-es-la-mejor-solucion-de-cms-para-alto-trafico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Definición de Contenido Estructurado OpenCms</title>
		<link>http://blog.tfsla.com/2009/05/definicion-de-contenido-estructurado-opencms/</link>
		<comments>http://blog.tfsla.com/2009/05/definicion-de-contenido-estructurado-opencms/#comments</comments>
		<pubDate>Wed, 06 May 2009 15:45:51 +0000</pubDate>
		<dc:creator>Hernán</dc:creator>
				<category><![CDATA[OpenCms]]></category>
		<category><![CDATA[alkacon]]></category>
		<category><![CDATA[xml content]]></category>

		<guid isPermaLink="false">http://blog.tfsla.com/?p=3</guid>
		<description><![CDATA[La presente guía pretende constituir un material de referencia para la definición de contenido XML estructurado en OpenCms. El contenido estructurado puede ser utilizado para crear &#8216;contenidos especiales&#8217; para Carteleras de Cine, Horoscopos, Infografías y otros tipos  de contenido. Introducción y Objetivos Básicamente la tarea comprenderá dos conjuntos de acciones diferenciadas: Aquellas que tengan que ver [...]]]></description>
			<content:encoded><![CDATA[<p>La presente guía pretende constituir un material de referencia para la definición de contenido XML estructurado en OpenCms. El contenido estructurado puede ser utilizado para crear &#8216;contenidos especiales&#8217; para Carteleras de Cine, Horoscopos, Infografías y otros tipos  de contenido.</p>
<p><span id="more-5"></span></p>
<p class="MsoNormal"><strong><span style="font-size: 18pt;">Introducción y Objetivos</span></strong></p>
<p>Básicamente la tarea comprenderá dos conjuntos de acciones diferenciadas:</p>
<ol>
<li>Aquellas que tengan que ver con la administración llevada a cabo desde el Workplace de OpenCms, lo que puede realizarse desde cualquier Web Browser, a través de la dirección en que se encuentre nuestro sistema.</li>
<li>La modificación de los archivos de configuración de OpenCms, para lo cual deberá accederse a la ubicación del servidor que soporte la instancia del sistema que estamos utilizando.</li>
</ol>
<p>Debido a que muy probablemente nos encontremos accediendo remotamente al servicio, deberemos valernos de algún método que nos permita tener acceso a los archivos necesarios desde donde nos encontremos. Puede optarse por una herramienta como PuTTY, o cualquier otra que nos permita conectarnos al servidor destino y acceder a sus archivos.</p>
<p>Nuestro objetivo sera entonces el de crear un tipo de contenido estructurado y facilitar su manipulación desde el Workplace. Podremos crear un nuevo tipo definido por el usuario, seleccionándolo desde la interfaz de creación, y editar su contenido, a partir del formulario que generará OpenCms con los parámetros que le indiquemos.</p>
<p class="MsoNormal">Nuestro interés se centra en ciertos archivos de configuración ubicados en el path <strong><em>&lt;rutaTomcat&gt;/webapps/opencms/WEB-INF/config</em></strong> (por ejemplo, para sistemas Linux suele ser por defecto: <strong><em>/usr/share/tomcat5/webapps/opencms/WEB-INF/config</em></strong>).</p>
<p class="MsoNormal">Opencms posee dos formas de realizar la definición de un tipo de contenido estructurado:</p>
<ul>
<li>
<div class="MsoNormal" style="text-align: justify;">La primera opción implica la modificación de los archivos <strong>opencms-vfs.xml</strong> y <strong>opencms-workplace.xml. </strong>Esta opción no es recomendada debido a su complejidad.</div>
</li>
<li>
<div class="MsoNormal">La segunda opción implica colocar los archivos que definirán la nueva estructura dentro de un modulo separado, y editar la definición de dicho módulo dentro del archivo <strong>opencms-modules.xml</strong>, que se encuentra en la misma ruta que los dos anteriores, y se encarga de albergar el “esqueleto” de los módulos definidos en nuestro sistema. Esta es la opción recomendada que utilizaremos.</div>
</li>
</ul>
<p class="MsoNormal">En resumen, esta última opción implica agregar información a<strong> opencms-modules.xml</strong> sobre el nuevo contenido en dos niveles:</p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal">Una referencia al archivo <strong>xsd</strong> que definirá nuestro contenido, lo que puede lograrse a través del elemento <strong>&lt;type&gt;</strong> de <strong>&lt;resourcetypes&gt;,</strong> más precisamente en su item <strong>&lt;param&gt;</strong>. <strong></strong></li>
</ul>
<p class="MsoNormal" style="margin-left: 18pt;">      Ejemplo: <em>&lt;param name=&#8221;schema&#8221;&gt;<strong>”Path xsd”</strong>&lt;/param&gt;</em><strong></strong></p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal">Detalles sobre el tipo de contenido en la vista de Explorador del Workspace (nombre, descripción, icono, etc), usando el elemento <strong>&lt;explorertype&gt;</strong> de <strong>&lt;explorertypes&gt;</strong>.</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt;">Ejemplo<em>: &lt;explorertype name=&#8221;<strong>nombreContenido</strong>&#8220;    key=&#8221;<strong>claveNuevoContenido</strong>&#8221; icon=&#8221;<strong>imagen.gif</strong>&#8221; reference=&#8221;<strong>xmlcontent</strong>&#8220;&gt;</em></p>
<p class="MsoNormal">A continuación, describiremos paso a paso las tareas a realizar para implementar la opción 2.</p>
<p class="MsoNormal"><strong><span style="font-size: 18pt;">Paso 1: Creación del Módulo</span></strong><br />
 <br />
Desde la vista de Administración, estando en Offline procedemos a la creación de un nuevo módulo. Como nombre de package usaremos <strong>com.tfsla.contenidos.prueba</strong>, y para el nombre del módulo utilizaremos, por ejemplo, <strong>Definicion de contenido estructurado</strong>. Es importante tildar los campos <strong>Create Modulefolder</strong> y <strong>Create classes subfolder</strong> entre las opciones que ofrece el recuadro <strong>Module folders</strong>. De lo contrario deberemos dirigirnos al mencionado opencms-modules.xml para definirlo manualmente, o realizarlo luego desde el Workplace.</p>
<p class="MsoNormal">Una vez creado el módulo, debe corroborarse que se haya generado automáticamente un <strong>Export Point</strong> para el subdirectorio classes que se eligió crear anteriormente. Para esto seleccionamos el nombre del módulo creado dentro de la vista de administración, con lo cual accederemos a un conjunto de opciones, entre las que se encuentra <strong>Module exportpoints</strong>. Una vez allí, podremos observar que la carpeta classes del módulo creado (<span class="link">/system/modules/com.tfsla.contenidos.prueba/classes/)</span> se mapea en WEB-INF/classes, lo que nos indica que fue correctamente creado. De lo contrario deberá elegirse New exportpoint y completarse los campos de forma manual.</p>
<p class="MsoNormal">Luego de esto nos encargaremos de los <strong>recursos</strong>. Volvemos a la vista de administración con las opciones de nuestro flamante módulo y seleccionamos esta vez, <strong>Module Resources</strong>. Seguramente se encontrará el path de nuestro módulo (/system/modules/com.tfsla.contenidos.prueba/).</p>
<p class="MsoNormal">Nuestra lista de recursos debería incluir rutas a archivos utilizados en la configuración de contenido estructurado, localizados en distintas partes del VFS. En particular el camino hacia la carpeta que contiene iconos para listar el contenido estructurado en la interfaz del Workplace. Éste es por defecto: /system/workplace/resources/filetypes/, que procedemos a añadir a nuestra lista de recursos.</p>
<p class="MsoNormal"><span style="font-size: 18pt;"><strong>Paso 2: Creación del esquema XSD</strong></span></p>
<p class="MsoNormal"><strong></strong>Así como optamos anteriormente por crear un módulo separado que contenga los elementos de nuestro nuevo tipo de contenido, haremos lo propio con los archivos <strong>xsd</strong> que definirán la estructura del mismo. Para esto nos colocamos dentro del módulo creado (<strong>/system/modules/com.tfsla.contenidos.prueba/</strong>) y vamos a <strong>New-&gt;Folder</strong>, en la vista de Explorador. Le pondremos el nombre <strong>schemas</strong> a la carpeta, que es el que se utiliza comúnmente para estos fines. Nos limitaremos sólo a nombrarlo, sin añadir cualquier otra propiedad.</p>
<p class="MsoNormal">Dentro de schemas, procederemos a generar un nuevo recurso, esta vez, un archivo del tipo <strong>Text File</strong>, al que nombraremos como <strong>contenidos.xsd</strong>.</p>
<p class="MsoNormal">A continuación, procederemos a editarlo, para dar lugar a un nuevo tipo de contenido con una estructura similar a la de una noticia.</p>
<p class="MsoNormal">Nos basaremos en el ejemplo que proporciona Alkacon, con algunas modificaciones. Podemos encontrarlo dentro del tutorial llamado “<strong>OpenCms XML content documentation</strong>”, que viene con la versión que utilizamos de OpenCms.</p>
<p class="MsoNormal">Nuestro contenido llevará un título, una cantidad de hasta tres subtítulos y un cuadro de texto.</p>
<p class="MsoNormal">A continuación se transcribe el xsd del que haremos uso:</p>
<address>&lt;xsd:schema xmlns:xsd=&#8221;http://www.w3.org/2001/XMLSchema&#8221; elementFormDefault=&#8221;qualified&#8221;&gt; </address>
<address>        &lt;xsd:include schemaLocation=&#8221;opencms://opencms-xmlcontent.xsd&#8221;/&gt;    </address>
<address>        &lt;xsd:element <strong>name=&#8221;<span style="color: red;">TfsTypes</span>&#8220;</strong> <strong>type=&#8221;<span style="color: red;">OpenCmsTfsTypes</span>&#8220;</strong>/&gt; </address>
<address>        &lt;xsd:complexType name=&#8221;<strong><span style="color: red;">OpenCmsTfsTypes</span></strong>&#8220;&gt;</address>
<address>               &lt;xsd:sequence&gt;</address>
<address>                       &lt;xsd:element name=&#8221;<strong><span style="color: red;">TfsType</span></strong>&#8221; type=&#8221;<strong><span style="color: red;">OpenCmsTfsType</span></strong>&#8221; minOccurs=&#8221;0&#8243; maxOccurs=&#8221;unbounded&#8221;/&gt;</address>
<address>               &lt;/xsd:sequence&gt;</address>
<address>        &lt;/xsd:complexType&gt;</address>
<address>        &lt;xsd:complexType name=&#8221;<strong><span style="color: red;">OpenCmsTfsType</span></strong>&#8220;&gt;</address>
<address>               &lt;xsd:sequence&gt;</address>
<address>                  &lt;xsd:element name=&#8221;<strong><span style="color: red;">Titulo</span></strong>&#8221; type=&#8221;OpenCmsString&#8221; /&gt;</address>
<address>                   &lt;xsd:element name=&#8221;<strong><span style="color: red;">Subtitulo</span></strong>&#8221; type=&#8221;OpenCmsString&#8221; maxOccurs=&#8221;3&#8243;/&gt;</address>
<address>                  &lt;xsd:element name=&#8221;<strong><span style="color: red;">Texto</span></strong>&#8221; type=&#8221;OpenCmsHtml&#8221; /&gt;</address>
<address>               &lt;/xsd:sequence&gt;</address>
<address>               &lt;xsd:attribute name=&#8221;language&#8221; type=&#8221;OpenCmsLocale&#8221; use=&#8221;required&#8221;/&gt;</address>
<address>        &lt;/xsd:complexType&gt; </address>
<address class="MsoNormal"><span style="font-family: 'Courier New'; font-size: 10pt;"> &lt;/xsd:schema&gt;</span></address>
<p class="MsoNormal">Como se puede observar, este archivo contiene el nombre del elemento raíz (TfsTypes, que debe terminar siempre con una “s”) y el tipo del contenido XML (que debe llevar el mismo nombre precedido del prefijo OpenCms).</p>
<p class="MsoNormal">Debajo de estas definiciones podemos ver la del elemento hijo con nombre TfsType (igual a su padre pero sin la “s”), y a continuación una segunda definición de tipo complejo, que contiene la secuencia de elementos con sus correspondientes tipos de datos. Aquí usamos <strong>OpenCmsString</strong> para cadenas cortas sin contenido HTML, y <strong>OpenCmsHtml</strong> que permite almacenar texto con contenido HTML.</p>
<p class="MsoNormal">Debe editarse el contenidos.xsd creado con esta información, y guardarse para finalizar la etapa de definición.</p>
<p class="MsoNormal"><strong><span style="font-size: 18pt;">Paso 3: Modificación de archivos de configuración</span></strong></p>
<p class="MsoNormal">Como mencionamos anteriormente, el archivo de configuración que modificaremos se llama <strong>opencms-modules.xml</strong> y se encuentra por defecto en el path</p>
<p class="MsoNormal"><strong>/usr/share/tomcat5/webapps/opencms/WEB-INF/config </strong>en sistemas Linux.</p>
<p class="MsoNormal">Hay que tener en cuenta que para modificar este tipo de archivos es necesario tener ciertos permisos, que, por lo general, no son frecuentes en usuarios normales del sistema. El root siempre puede llevar a cabo estas actualizaciones, por lo que es recomendable, o bien ingresar como éste, o adquirir sus permisos (por ejemplo, en Linux el comando <strong>sudo su</strong> nos permite que nuestro uid y gid reales y efectivos se seteen a los del superusuario, y podamos ejecutar comandos como él sin necesidad de estar logueados a root).</p>
<p class="MsoNormal">En primer lugar debemos identificar la parte del archivo <strong>opencms-module.xml</strong> que editaremos a continuación. Dicha sección del fichero será la que contenga las definiciones sobre el módulo que creamos. En nuestro caso se trata de la siguiente:</p>
<address class="MsoNormal">         &lt;module&gt;</address>
<address class="MsoNormal">            &lt;name&gt;com.tfsla.contenidos.prueba&lt;/name&gt;</address>
<address class="MsoNormal">            &lt;nicename&gt;&lt;![CDATA[Definicion de contenido estructurado.]]&gt;&lt;/nicename&gt;</address>
<address class="MsoNormal">            &lt;class/&gt;</address>
<address class="MsoNormal">            &lt;description/&gt;</address>
<address class="MsoNormal">            &lt;version&gt;0.2&lt;/version&gt;</address>
<address class="MsoNormal">            &lt;authorname/&gt;</address>
<address class="MsoNormal">            &lt;authoremail/&gt;</address>
<address class="MsoNormal">            &lt;datecreated/&gt;</address>
<address class="MsoNormal">            &lt;userinstalled/&gt;</address>
<address class="MsoNormal">            &lt;dateinstalled/&gt;</address>
<address class="MsoNormal">            &lt;dependencies/&gt;</address>
<address class="MsoNormal">            &lt;exportpoints&gt;</address>
<address class="MsoNormal">                &lt;exportpoint uri=&#8221;/system/modules/com.tfsla.contenidos.prueba/classes/&#8221; destination=&#8221;WEB-INF/classes/&#8221;/&gt;</address>
<address class="MsoNormal">            &lt;/exportpoints&gt;</address>
<address class="MsoNormal">            &lt;resources&gt;</address>
<address class="MsoNormal">                &lt;resource uri=&#8221;/system/modules/com.tfsla.contenidos.prueba/&#8221;/&gt;</address>
<address class="MsoNormal">                &lt;resource uri=&#8221;/system/workplace/resources/filetypes/&#8221;/&gt;</address>
<address class="MsoNormal">            &lt;/resources&gt;</address>
<address class="MsoNormal">            &lt;parameters/&gt;</address>
<address class="MsoNormal">        &lt;/module&gt;</address>
<p class="MsoNormal">Para localizar este fragmento podemos valernos de varios recursos si contamos con un editor sofisticado, sin embargo este no es siempre el caso, ya que, por lo general, nos valemos de versiones del sistema operativo concebidas con el único fin de soportar la instancia del OpenCms del que nos servimos. Si utilizamos vi para la edición (nos basaremos en dicho editor por encontrarse en la mayoría de los casos disponible), podremos localizar esta porción facilmente a través del comando de búsqueda :/ , seguido del nombre de nuestro módulo (com.tfsla.contenidos.prueba). El cursor se posicionará entonces en el sector deseado dentro del xml.</p>
<p class="MsoNormal">Para proceder a la edición de esta parte, nos basaremos en un módulo ya existente en el sistema, a fin de copiar la estructura necesaria, modificando las secciones que merezcan un tratamiento especial. Esto nos permitirá reutilizar un código ya probado y evitar cualquier error debido a restricciones inherentes.</p>
<p class="MsoNormal">Nos dirigimos, dentro del mismo <strong>opencms-modules.xml</strong>, a la sección que define el módulo <strong>org.opencms.frontend.templateone.xmlcontentdemo</strong>.</p>
<p class="MsoNormal">Nuestro interés se encuentra en los elementos etiquetados como &lt;resourcetypes&gt; y &lt;explorertypes&gt;.</p>
<p class="MsoNormal">Dentro de <strong>&lt;resourcetypes&gt; </strong>nos interesa el siguiente fragmento:</p>
<address class="MsoNormal">            &lt;resourcetypes&gt;</address>
<address class="MsoNormal">                &lt;type class=&#8221;org.opencms.file.types.CmsResourceTypeXmlContent&#8221; name=&#8221;<strong><span style="color: red;">article</span></strong>&#8221; id=&#8221;<strong><span style="color: red;">25</span></strong>&#8220;&gt;</address>
<address class="MsoNormal">                    &lt;param name=&#8221;schema&#8221;&gt;<strong><span style="color: red;">/sites/default/xmlcontentdemo/article.xsd</span></strong>&lt;/param&gt;</address>
<address class="MsoNormal">                &lt;/type&gt;</address>
<address class="MsoNormal">            &lt;/resourcetypes&gt; </address>
<p class="MsoNormal">Marcamos en rojo lo que debe cambiarse. En name colocaremos el nombre de lo que deseamos crear. En nuestro caso lo bautizamos <strong>TfsType</strong>. En id deberemos optar por un identificador que sólo pertenezca al tipo que definiremos, es decir, debe ser único en el sistema OpenCms que estamos usando. Una buena opción sería <strong>comenzar a partir de 100</strong>, ya que hay escasas posibilidades de que en la declaración de contenidos se haya alcanzado este valor. Es importante aclarar que si se utiliza un id previamente definido, nuestra definición se corresponderá a la de aquella que lo haya usado, basándose nuestro tipo en la estructura creada para la misma.</p>
<p class="MsoNormal">Finalmente, en la etiqueta <strong>&lt;param&gt;</strong> correspondiente (marcada en rojo también), colocamos el path donde se halla nuestro xsd:</p>
<p class="MsoNormal"><strong>system/modules/com.tfsla.contenidos.prueba/schemas/contenidos.xsd</strong>.</p>
<p class="MsoNormal">Con respecto a los elementos de &lt;explorertypes&gt;, el fragmento que extraeremos desde xmlcontentdemo será éste: </p>
<address class="MsoNormal">            &lt;explorertypes&gt;</address>
<address class="MsoNormal">                &lt;explorertype name=&#8221;<strong><span style="color: red;">article</span></strong>&#8221; key=&#8221;<strong><span style="color: red;">fileicon.article</span></strong>&#8221; icon=&#8221;<strong><span style="color: red;">article.gif</span></strong>&#8221; reference=&#8221;xmlcontent&#8221;&gt;</address>
<address class="MsoNormal">                    &lt;newresource page=&#8221;structurecontent&#8221; uri=&#8221;newresource_xmlcontent.jsp?newresourcetype=<strong><span style="color: red;">article</span></strong>&#8221; order=&#8221;<strong><span style="color: red;">25</span></strong>&#8221; autosetnavigation=&#8221;false&#8221; autosettitle=&#8221;false&#8221;/&gt;</address>
<address class="MsoNormal">                    &lt;accesscontrol&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Administrators&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Projectmanagers&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Users&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                    &lt;/accesscontrol&gt;</address>
<address class="MsoNormal">                &lt;/explorertype&gt;</address>
<address class="MsoNormal">            &lt;/explorertypes&gt;</address>
<p class="MsoNormal">Cambiaremos el atributo name a <strong>TfsType</strong>, key a <strong>fileicon.TfsType</strong>, y icon a <strong>xmlcontent.gif</strong>. En la uri, la palabra article coloreada debe ser reemplazada por <strong>TfsType</strong> y order al número elegido anteriormente, por ejemplo, <strong>101</strong>. La parte restante puede dejarse sin cambios, al menos para los fines del presente artículo.</p>
<p class="MsoNormal">Resumiendo, el archivo opencms-modules.xml, en la porción de nuestro módulo deberá tener la siguiente apariencia:</p>
<address class="MsoNormal">        &lt;module&gt;</address>
<address class="MsoNormal">            &lt;name&gt;<span style="color: red;">com.tfsla.contenidos.prueba</span>&lt;/name&gt;</address>
<address class="MsoNormal">            &lt;nicename&gt;&lt;![CDATA[<span style="color: red;">Definicion de contenido estructurado</span>.]]&gt;&lt;/nicename&gt;</address>
<address class="MsoNormal">            &lt;class/&gt;</address>
<address class="MsoNormal">            &lt;description/&gt;</address>
<address class="MsoNormal">            &lt;version&gt;0.2&lt;/version&gt;</address>
<address class="MsoNormal">            &lt;authorname/&gt;</address>
<address class="MsoNormal">            &lt;authoremail/&gt;</address>
<address class="MsoNormal">            &lt;datecreated/&gt;</address>
<address class="MsoNormal">            &lt;userinstalled/&gt;</address>
<address class="MsoNormal">            &lt;dateinstalled/&gt;</address>
<address class="MsoNormal">            &lt;dependencies/&gt;</address>
<address class="MsoNormal">            &lt;exportpoints&gt;</address>
<address class="MsoNormal">                &lt;exportpoint uri=&#8221;<span style="color: red;">/system/modules/com.tfsla.contenidos.prueba/classes/</span>&#8221; destination=&#8221;WEB-INF/classes/&#8221;/&gt;</address>
<address class="MsoNormal">            &lt;/exportpoints&gt;</address>
<address class="MsoNormal">            &lt;resources&gt;</address>
<address class="MsoNormal">                &lt;resource uri=&#8221;<span style="color: red;">/system/modules/com.tfsla.contenidos.prueba/</span>&#8220;/&gt;</address>
<address class="MsoNormal">                &lt;resource uri=&#8221;/system/workplace/resources/filetypes/&#8221;/&gt;</address>
<address class="MsoNormal">            &lt;/resources&gt;</address>
<address class="MsoNormal">            &lt;parameters/&gt;</address>
<address class="MsoNormal">            &lt;resourcetypes&gt;</address>
<address class="MsoNormal">                &lt;type class=&#8221;org.opencms.file.types.CmsResourceTypeXmlContent&#8221; name=&#8221;<span style="color: red;">TfsType</span>&#8221; id=&#8221;<span style="color: red;">101</span>&#8220;&gt;</address>
<address class="MsoNormal">                    &lt;param name=&#8221;schema&#8221;&gt;<span style="color: red;">/system/modules/com.tfsla.contenidos.prueba/schemas/contenidos.xsd</span>&lt;/param&gt;</address>
<address class="MsoNormal">                &lt;/type&gt;</address>
<address class="MsoNormal">            &lt;/resourcetypes&gt;</address>
<address class="MsoNormal">            &lt;explorertypes&gt;</address>
<address class="MsoNormal">                &lt;explorertype name=&#8221;<span style="color: red;">TfsType</span>&#8221; key=&#8221;<span style="color: red;">fileicon.TfsType</span>&#8221; icon=&#8221;<span style="color: red;">xmlcontent.gif</span>&#8221; reference=&#8221;xmlcontent&#8221;&gt;</address>
<address class="MsoNormal">                    &lt;newresource page=&#8221;structurecontent&#8221; uri=&#8221;newresource_xmlcontent.jsp?newresourcetype=<span style="color: red;">TfsType</span>&#8221; order=&#8221;<span style="color: red;">101</span>&#8221; autosetnavigation=&#8221;false&#8221; autosettitle=&#8221;false&#8221;/&gt;</address>
<address class="MsoNormal">                    &lt;accesscontrol&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Administrators&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Projectmanagers&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                        &lt;accessentry principal=&#8221;GROUP.Users&#8221; permissions=&#8221;+r+v+w+c&#8221;/&gt;</address>
<address class="MsoNormal">                    &lt;/accesscontrol&gt;</address>
<address class="MsoNormal">                &lt;/explorertype&gt;</address>
<address class="MsoNormal">            &lt;/explorertypes&gt;</address>
<address class="MsoNormal">        &lt;/module&gt;</address>
<p class="MsoNormal">Una vez editada esta sección del archivo abandonamos el editor y nos preparamos a la próxima etapa, nuevamente desde el Workplace. Nuestra incursión en los archivos de configuración se da por finalizada de esta manera.</p>
<p class="MsoNormal"><strong><span style="font-size: 18pt;">Paso 4: Creación del archivo properties</span></strong></p>
<p class="MsoNormal">Nos colocamos entonces en la vista del Explorador, en el Workplace de nuestro OpenCms y accedemos al path</p>
<p class="MsoNormal"><strong>/system/modules/com.tfsla.contenidos.prueba/classes/com/tfsla/contenidos/prueba/</strong></p>
<p class="MsoNormal">para la creación de un archivo que nos permitirá definir cómo este tipo de contenido es llamado cuando es listado en la interfaz del Workplace.</p>
<p class="MsoNormal">Todo esto se logra a través de un archivo .properties (tabla hash), que bautizaremos como <strong>workplace.properties</strong>.</p>
<p class="MsoNormal">Damos New, para crear un nuevo Text File, con el nombre que mencionamos, y lo llenamos con lo siguiente: </p>
<pre>fileicon.TfsType = TfsType

title.TfsType = Create new TfsType </pre>
<p class="MsoNormal">Guardamos esta información y ya tenemos nuestro archivo properties listo para nuestra nueva definición.</p>
<p class="MsoNormal"> <strong><span style="font-size: 18pt;">Paso 5: Creación de un recurso del tipo definido</span></strong></p>
<p class="MsoNormal">Antes de proceder, reiniciaremos Tomcat, a fin de dar lugar a las modificaciones llevadas a cabo. </p>
<p class="MsoNormal">Finalmente resta crear un nuevo elemento para probar nuestra definición. Vamos a <strong>New-&gt;Structured content</strong>, y veremos que entre las opciones que nos presenta el sistema, se encuentra la de nuestro flamante <strong>TfsType</strong>. Seleccionamos el tipo mencionado y luego lo editamos para ver que el formulario se creó de acuerdo a los parámetros colocados en el archivo contenidos.xsd.</p>
<p class="MsoNormal">De esta manera finaliza el proceso de definición de contenido XML estructurado. </p>
<p class="MsoNormal"><strong><span style="font-size: 18pt;">Información adicional y enlaces útiles:</span></strong></p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal" style="text-align: justify;">Tutorial Oficial de Alkacon Software sobre contenidos estructurados llamado “OpenCms XML content Documentation”. Interesante para la definición de esquemas XSD. Carece de contenido sobre la utilización del tipo creado desde la interfaz del Workplace:</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt;"><a href="http://195.14.236.181/opencms/opencms/alkacon-documentation/documentation-xmlcontent/">http://195.14.236.181/opencms/opencms/alkacon-documentation/documentation-xmlcontent/</a></p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal">Tutorial Flash para la creación de contenido estructurado:</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt;"><a href="http://www.wdogsystems.com/opencms/opencms/demos/structured_content_editing.html">http://www.wdogsystems.com/opencms/opencms/demos/structured_content_editing.html</a></p>
<ul style="margin-top: 0cm;" type="disc">
<li class="MsoNormal">Herramienta PuTTY, útil para el acceso remoto al servidor que contenga la instancia de OpenCms que usamos:</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt;"><a href="http://www.tartarus.org/~simon/putty-snapshots/x86/putty.exe" target="_blank">http://www.tartarus.org/~simon/putty-snapshots/x86/putty.exe</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tfsla.com/2009/05/definicion-de-contenido-estructurado-opencms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

