Síguenos en: icono twitter icono facebook

 

Como indicar en un XSD una relación strong entre dos recursos de OpenCms

En primer lugar repasaremos un poco que es una relación débil (weak) o fuerte (strong):

  • weak: Se usará cuando un recurso no depende del otro para mostrarse. Por ejemplo cuando vamos a montar un enlace que abrirá otra página.
  • Strong: Se usará cuando el recurso si es dependiente del otro. Por ejemplo cuando vamos a pintar una imagen asociada.

Por defecto, todo enlace que creemos será weak, por lo tanto, si en nuestro caso tenemos que crear un enlace debil no tenemos que hacer nada más. En el caso que necesitemos configurar nuestro enlace fuerte. Pero nos queda indicar algo más, que es lo que pasa cuando nos encontramos con un enlace fuerte y este está roto. En el caso de tener un enlace débil en una imagen, si al pintar la imagen esta no se encuentra, provocará un error en la página. Caso muy común cuando por ejemplo publicamos una noticia pero no la imagen asociada.

Para evitar esto podemos configurar los siguientes casos:

  • invalidate = false: En este caso no haremos nada, si va a pintar la imagen y no la encuentra saldrá la imagen vacia.
  • invalidate = true o node: En el caso de marcar el invalidate a true o node, equivaldrá a cuando hemos dejado ese campo vacio, es decir, como si no se hubiera dado de alta ninguna imagen. Ojo con este caso que dará error siempre que el recurso sea obligatorio, es decir, el minOccurs sea 1, en este caso no podremos aplicar esta opción ya que al eliminar el nodo de la imagen invalidariamos el minOccurs = 1.
  • invalidate = parent: en este caso, si encontramos que el enlace de la imagen se ha roto, invalidariamos no solo el nodo de la imagen, sino también el padre. Por ejemplo, imaginaros que tenemos un recurso anidado donde el campo imagen está formado por el enlace a la imagen y por texto al pie de la imagen (OpenCmsString), en este caso, si marcamos invalidate=parent, se invalida tanto el nodo de la imagen como el del texto al pie. Al igual que en el caso anterior, cuando tenemos un minOccurs = 1 no podemos aplicar esta configuración.
Código en el xsd principal:
<xsd:element name="Image" type="OpenCmsImage" minOccurs="0" maxOccurs="unbounded"/>
<relations>
	<relation element="Image/Image" invalidate="parent" />
</relations>

Código en el xsd secundario:
<xsd:element name="Image" type="OpenCmsVfsFile" />	
<relations>
	<relation element="Image" invalidate="false" type="strong" />
</relations>

Sergio Raposo Vargas

© OpenCms Hispano - Powered by OpenCms 7.5.2 & Template Saga
logo template Saga