Aserciones
Las aserciones descritas en este apartado son aserciones de tipos complejos. Dicha aserción se define en un elemento xs:assert, que se introdujo en la versión 1.1 del esquema XML, y sirve de restricción de validez del tipo complejo. (El otro tipo de aserción es una aserción de un tipo simple, que se define en un elemento xs:assertion y se crea y edita en el ayudante de entrada Facetas de un tipo simple. La funcionalidad que describimos aquí no cubre este tipo de aserción.)
Nota: | Las aserciones son una característica de la especificación XSD 1.1. Esto significa que las funciones de edición de aserciones solamente están disponibles en el modo XSD 1.1. |
Dónde editar aserciones
En la vista Esquema las aserciones de tipos complejos se pueden crear y editar de varias formas:
•En la vista general del esquema: en la pestaña Aserciones del panel Atributos/Aserciones/Restricciones de identidad (AARID) (imagen siguiente). Para habilitar la pestaña Aserciones cambie el modo XSD a 1.1 (p.ej. con el icono XSD 1.1 de la barra de herramientas).
•En la vista del modelo de contenido: las aserciones se pueden editar en la pestaña Aserciones (imagen anterior) o en el diagrama (imagen siguiente). Sólo se puede tener habilitada una de estas opciones (pestaña o diagrama) a la vez. Para elegir la opción que más le convenga, haga clic en el icono Mostrar aserciones en diagrama de la barra de herramientas Diseño de esquemas (véase más abajo). (Para definir una de estas opciones como predeterminada, vaya al cuadro de diálogo Configurar visualización del esquema (Diseño de esquemas | Configurar opciones de vista | Pestaña Elemento).) En el diagrama del modelo, seleccione el recuadro aserciones del tipo complejo o del elemento de contenido complejo. Después escriba o edite la definición de la aserción directamente o en el ayudante de entrada Detalles.
Mostrar aserciones en el diagrama: Habilitado en la vista del modelo de contenido: Habilita/deshabilita la representación de las aserciones entre el diagrama (habilitado) y la pestaña Aserciones. |
Ámbito de la aserción
La expresión XPath utilizada para definir la restricción de la aserción debe estar dentro del ámbito del tipo complejo en el que se define el elemento assert. De modo que, si la expresión XPath necesita acceder a un nodo, el elemento assert debe definirse en un nodo antecesor de dicho nodo.
Añadir y eliminar aserciones
Un tipo complejo puede tener varias aserciones. La expresión XPath de cada aserción debe dar como resultado el valor booleano true para que el elemento del documento de instancia sea válido. Siga estos pasos para añadir una aserción a un tipo complejo:
•En la vista general del esquema: Seleccione el tipo complejo. En la pestaña Aserciones del panel AARID (imagen anterior), haga clic en el icono Agregar o Insertar de la parte superior izquierda. Puede agregar varias aserciones si quiere. Para eliminar una aserción, selecciónela y haga clic en el icono Eliminar de la parte superior derecha.
•En la vista del modelo de contenido (imagen anterior): Haga clic con el botón derecho en el tipo complejo y seleccione Agregar secundario | Aserción. También puede hacer clic con el botón derecho en una de las aserciones ya existentes del diagrama del tipo complejo y seleccionar Anexar | Aserción o Insertar | Aserción. Puede añadir varias aserciones si quiere. Para eliminar una aserción, selecciónela y pulse la tecla Suprimir.
Definir la expresión XPath de la aserción
La expresión XPath de una aserción de tipo complejo define la restricción de validez que se debe aplicar al elemento de tipo complejo en el documento de instancia. Por ejemplo, en las imágenes anteriores, la aserción está en el elemento de tipo complejo team y la expresión XPath de la aserción es: @region="US". En el documento de esquema XML la aserción aparece así:
<xs:assert test='@region="US"'/>
La aserción indica que, en el documento de instancia, el elemento team debe tener un atributo region cuyo valor es US. Si no es así, el documento no es válido.
Tenga en cuenta que:
•Las expresiones XPath deben estar escritas en XPath 2.0
•Los nodos probados en la expresión XPath deben estar dentro del ámbito de la aserción (véase más arriba)
•Si una expresión no da como resultado el valor booleano true/false, el valor devuelto se convierte en un valor booleano. Las secuencias no vacías se convierten en true y las secuencias vacías se convierten en false.
•Si la expresión tiene un error de sintaxis, la expresión aparece en color rojo. Los errores de contexto no se señalizan. Por ejemplo, si la expresión XPath prueba un atributo y el atributo no está definido en el esquema, no se emite ningún error.
El mensaje de la aserción
Lo más útil es aportar una explicación de la aserción junto con su definición, para que en caso de que la aserción no se cumpla cuando se valide el documento de instancia XML, la aplicación pueda emitir el mensaje adecuado. Como la especificación XML Schema no prevé ese tipo de mensajes, XMLSpy permite suministrar un mensaje en el espacio de nombres xml-schema-extensions de Altovahttps://www.altova.com/es/xml-schema-extensions (o en cualquier otro espacio de nombres) junto con la definición de la aserción y usarla en la validación del documento XML de instancia. Por ejemplo:
<xs:assert test="count(//MiNodo) ge 1" altova:message="Se necesita un elemento MiNodo como mínimo"/> o
<xs:assertion test="count(//MiNodo) ge 1" altova:message="Se necesita un elemento MiNodo como mínimo"/>
Si la restricción especificada por la aserción no se cumple, además del mensaje de error de validación el motor de validación de XMLSpy emitirá un mensaje sobre la aserción a modo de sugerencia. El validador informará del valor de un atributo assert/@message o assertion/@message independientemente del espacio de nombres en el que esté el atributo message. No obstante, recuerde que en la vista Esquema solamente podrá editar atributos message que estén en el espacio de nombres xml-schema-extensions de Altova. Para editar atributos message de otros espacios de nombres debe usar la vista Texto.
Para más información consulte el apartado Mensajes de aserción.
Uso del atributo xpathDefaultNamespace
El espacio de nombres predeterminado declarado en el documento de esquema es el espacio de nombres predeterminado del documento de esquema. Afecta a los nombres de elemento sin prefijo del documento pero no a los nombres de elemento sin prefijo de las expresiones XPath del documento de esquema.
El atributo xpathDefaultNamespace es una característica nueva de la especificación XSD 1.1 y es el mecanismo utilizado para especificar el espacio de nombres al que pertenecen los nombres de elemento sin prefijo de las expresiones XPath.
El ámbito de los atributos xpathDefaultNamespace son los elementos del esquema XML en los que se decararon. El atributo xpathDefaultNamespace puede aparecer en estos elementos de XML Schema 1.1:
•xs:schema
•xs:assert y xs:assertion
•xs:alternative
•xs:selector y xs:field (en restricciones de identidad)
El atributo xpathDefaultNamespace de xs:schema se configura (en el modo XSD 1.1) en el cuadro de diálogo "Configuración del esquema" (Diseño de esquemas | Configuración del esquema). El atributo xpathDefaultNamespace de los demás elementos se configura en el ayudante de entrada Detalles de cada elemento (imagen siguiente).
Al declararse el espacio de nombres predeterminado de la XPath en xs:schema, se declara el espacio de nombres predeterminado de la XPath para el ámbito de todo el esquema. Puede invalidar esta declaración en los elementos en los que se permite el atributo xpathDefaultNamespace (véase la lista anterior).
En lugar de incluir un espacio de nombres real, el atributo xpathDefaultNamespace incluye una de estas tres palabras clave:
•##targetNamespace: el espacio de nombres predeterminado de la XPath será el mismo que el espacio de nombres de destino del esquema
•##defaultNamespace: el espacio de nombres predeterminado de la XPath será el mismo que el espacio de nombres predeterminado del esquema
•##local: sin espacio de nombres predeterminado de XPath
Si en el documento no se declara ningún espacio de nombres predeterminado de XPath, los elementos sin prefijo de las expresiones XPath no estarán en ningún espacio de nombres.
Nota: | La declaración de espacio de nombres predeterminado de XPath no afecta a los atributos. |
Para las expresiones XPath de las aserciones también puede especificar el espacio de nombres predeterminado de la XPath en la definición de la aserción. En la pestaña Aserciones del panel AARID (imagen siguiente) seleccione una opción de la lista desplegable del campo XPathDefaultNS.
El espacio de nombres seleccionado estará en el ámbito de la aserción.