Cuando creamos un contenido en OpenCMS podemos crear tipos de contenido que incluyan otros contenidos dentro, de forma que podamos «nestear» y asi poder tener tipos de contenidos que podemos usar en más de un tipo (o escalar) de forma sencilla.
Imaginemos (como ejemplo) que queremos crear un tipo de contenido llamado «pagina generica» el cual sera un contenido que tenga un titulo, subtitulo, párrafos de texto, imagenes, enlaces y adjuntos (ficheros). Pero que cada párrafo puede contener a su vez más imagenes, adjuntos… e incluso que los enlaces tengan descripciones (ademas del enlace en si, tanto externo como interno). Si hicieramos un unico contenido seria «grande» y podria ser poco usable, cuando lo importante es tener un contenido que «contenga» el resto.
Así, podemos crear un contenido llamado PaginaTexto que contenga contenidos Parrafo, Imagenes y Enlaces.
El contenido contenedor llamado PaginaTexto, podría ser así:
[code]
[/code]
Donde, si vemos, nuestro contenido esta creado en un modulo llamado com.contenidos.uva.es, aunque eso no sea lo importante.
Si nos fijamos, lo importante son los includes donde tenemos 3 tipos que incluimos: enlaces.xsd, parrafos.xsd y enlaces.xsd que como vemos estan dentro de un directorio llamado nested dentro de los schemas.
Ademas, si nos fijamos en la definición del contenido OpenCmsPaginaTexto cuando definimos un elemento (por ejemplo Parrafo) el tipo de elemento es justamente el tipo de los otros esquemas incluidos.
Así, nested/imagenes.xsd sera:
[code]
[/code]
Tambien, nested/parrafos.xsd sera:
[code]
[/code]
Y nested/enlaces.xsd será:
[code]
[/code]
Donde, lo más curioso es que los subesquemas incluyen otros esquemas a su vez en su propia definición de datos. Con lo que podemos hacerlo tan complejo como queramos.
Destacar que los esquemas «nesteados» han de llevar obligatoriamente en la definición del lenguaje:
[code]
[/code]
Es decir, en modo opcional y no requerido ya que solo un elemento ha de llevarlo en requerido.
El resultado será el siguiente: