Altova XMLSpy 2024 Professional Edition 

Las restricciones de identidad (IDC) se pueden definir en declaraciones de elementos locales o globales. Estas restricciones especifican el carácter único de los nodos y permiten hacer referencia correctamente a los nodos únicos.

 

Mecanismos de declaración

Puede definir restricciones de identidad (unique, key, keyref) de varias formas:

 

En la vista general del esquema puede declarar las restricciones en los elementos globales. Seleccione un elemento global y defina las IDC en la pestaña Restricciones de identidad del panel Atributos/Aserciones/Restricciones de identidad (panel AARID) (imagen siguiente).

IDCUnique02

Añada una IDC (unique, key, keyref) con el icono Insertar o Anexar de la pestaña Restricciones de identidad. Estos iconos también sirven para añadir la propiedad field a la restricción. Use el icono Eliminar para eliminar la restricción o la propiedad field seleccionada.

 

En la vista del modelo de contenido de un elemento global puede definir las IDC del elemento global o de un elemento local descendiente. En esta vista, las restricciones se pueden editar en la pestaña Restricciones de identidad (imagen anterior) o en el recuadro restricciones del elemento del diagrama (observe que en la imagen siguiente el elemento match tiene una restricción de unicidad con un selector team). Para editar las IDC en el diagrama del elemento directamente, seleccione la opción pertinente en el cuadro de diálogo "Configurar visualización del esquema" (Diseño de esquemas | Configurar opciones de vista). O puede hacer clic en el icono Mostrar restricciones en diagrama de la barra de herramientas Diseño de esquemas. A partir de ese momento, el diagrama incluye una representación gráfica de las IDC.

IDCinDiagram01

Para añadir una IDC (unique, key, keyref) en el diagrama cuando las restricciones están representadas en el diagrama directamente, haga clic con el botón derecho en el elemento que desea restringir y seleccione Agregar secundario | [ IDC ] en el menú contextual. El elemento field solamente está disponible en el menú contextual si seleccionó una IDC en el diagrama. Para eliminar la propiedad field o la IDC, selecciónelas y pulse la tecla Suprimir.

 

La expresión XPath se puede introducir en el recuadro selector y en el recuadro field de tres maneras diferentes: (i) escribiéndola directamente, (ii) seleccionando el nodo en la lista desplegable que aparece al hacer clic en el recuadro selector o field, o (iii) arrastrando el nodo de destino hasta el recuadro selector o field y soltándolo cuando el recuadro aparezca resaltado. La expresión XPath se crea automáticamente.

 

Nota:en la pestaña Restricciones de identidad del ayudante de entrada Componentes se ofrece un resumen de todas las restricciones de identidad del esquema.

 

Iconos relacionados con las restricciones de identidad

 

icConstraintsToggle

Mostrar restricciones en diagrama: disponible en la vista del modelo de contenido solamente. Habilita/deshabilita la representación de las restricciones de identidad en el diagrama, en lugar de en el panel AARID.

icIDC

Mostrar restricciones de identidad: disponible en la vista del modelo de contenido solamente. Habilita/deshabilita la información sobre las IDC.

IDCselector IDCfield

Nodo selector, nodo field: aparecen en los recuadros del diagrama e identifican el nodo seleccionado (en la IDC) por la expresión XPath de selector y de field (respectivamente).

 

Representación de las restricciones de identidad (IDC)

Si está activado el icono Mostrar restricciones de identidad icIDC, la información sobre las IDC aparece en el diagrama y se puede ver mejor. Los nodos seleccionados por las expresiones XPath de selector y field se señalan con unos pequeños iconos (ver la lista anterior) y el recuadro de la IDF está conectado al recuadro de sus selector y field por medio de líneas de color verde (imagen anterior).

El icono Mostrar restricciones de identidad también activa la función de validación de IDC de la vista Esquema. Si una expresión XPath o la restricción IDC no es correcta, los elementos erróneos se indican en color rojo, mientras que las advertencias se señalan en color naranja. Cuando se valida el documento de esquema XML, los mensajes de error y advertencia aparecen en la ventana Mensajes.

Para deshabilitar esta función de validación, haga clic otra vez en el icono Mostrar restricciones de identidad icIDC.

 

Ejemplo de código XML

Los ejemplos de restricciones de identidad que aparecen más abajo en este apartado están basados en este documento de instancia válido:

 

 

<results xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="Scores.xsd">

 <!----- Grupos ----->

 <group id="A">

         <team name="Brazil"/>

         <team name="Germany"/>

         <team name="Italy"/>

         <team name="Holland"/>

 </group>

 <group id="B">

         <team name="Argentina"/>

         <team name="France"/>

         <team name="England"/>

         <team name="Spain"/>

 </group>

 <!----- Partidos ----->

 <match group="A" date="2012-06-12" location="Munich">

         <team name="Brazil" for="2" points="3"/>

         <team name="Germany" for="1" points="0"/>

 </match>

 <match group="A" date="2012-06-12" location="Frankfurt">

         <team name="Italy" for="2" points="1"/>

         <team name="Holland" for="2" points="1"/>

 </match>

 <match group="B" date="2012-06-13" location="Munich">

         <team name="Argentina" for="2" points="3"/>

         <team name="France" for="0" points="0"/>

 </match>

 <match group="B" date="2012-06-13" location="Berlin">

         <team name="England" for="0" points="1"/>

         <team name="Spain" for="0" points="1"/>

 </match>

</results>

 

Restricciones de unicidad (unique)

Una restricción de unicidad especifica que el valor de un elemento o atributo (o de un conjunto de elementos o atributos) debe ser único dentro de un ámbito determinado. En el código XML del ejemplo, queremos asegurarnos de que los dos equipos que se enfrentan en un partido no son el mismo equipo. De modo que, dentro del ámbito de cada elemento match, restringimos el valor de los nodos team/@name como valor único. Para hacer esto es necesario seguir estos pasos:

 

1.En la vista general del esquema, seleccione el elemento match. El elemento match será el ámbito de la definición de restricción de identidad.

2.En la pestaña Restricciones de identidad, haga clic en el icono Anexar o Insertar de la parte superior izquierda. Haga clic en Unique en el menú que aparece. Se añade una fila para la restricción de unicidad (imagen siguiente).

IDCUnique01

3.Ponga un nombre a la restricción de unicidad. (En el ejemplo de la imagen se usó el nombre MatchTeams.)

4.Introduzca una expresión XPath en el campo Selector para seleccionar el elemento team. Recuerde que el elemento match es el nodo de contexto (el ámbito). Ahora el elemento team es el selector de la IDC, es decir, el nodo al que afecta la restricción de unicidad.

5.En el campo Field, escriba el nodo @name que debe ser único. El valor de este nodo es el valor que debe ser único.

 

La restricción de unidad que acabamos de describir especifica que dentro del ámbito de cada elemento match, cada elemento team debe tener un valor único en el atributo @name.

 

Puede usar el resto de los campos de la pestaña para comprobar la unicidad. Por ejemplo, puede definir una restricción de unicidad en el elemento results para comprobar si todos los partidos tienen una combinación única de fecha y lugar: no puede haber más de un partido en un mismo lugar en la misma fecha. La restricción de unicidad debe tener, por cada elemento match (el selector), una combinación única de valores para los atributos @date y @location dentro del ámbito del elemento results.

 

Defina la restricción de unicidad en el elemento results tal y como hizo en el paso anterior. En este caso el Selector es match y en la columna Field introducimos @date y @location (imagen siguiente). Para añadir otro elemento en la columna Field, haga clic en el icono Anexar y después seleccione Field.

IDCUnique02
Nota:la columna Refer de la pestaña Restricciones de identidad se habilita solamente en las restricciones de identidad keyref.

 

Restricciones de clave (key)

Una restricción de clave key especifica que (i) el valor de un elemento o atributo (o de un conjunto de elementos o atributos) debe ser único dentro de un ámbito determinado y que (ii) estos elementos o atributos deben estar presentes en el documento de instancia XML. Por tanto, los elementos o atributos opcionales no se deben seleccionar como field de una restricción key. En otras palabras, una restricción de clave key es una restricción de unicidad (unique) con una restricción adicional: que los atributos o elementos seleccionados como field deben estar presentes a la fuerza en el documento de instancia XML.

 

En la imagen siguiente aparece una restricción de clave key definida en un elemento match, similar a la primera restricción de unicidad del ejemplo.

IDCKey01

Esta restricción de clave key especifica que dentro del ámbito de cada elemento match, cada elemento team debe tener un valor único para el atributo @name. Además, especifica que el atributo @name debe estar presente en cada elemento match/team.

 

Nota:la columna Refer de la pestaña Restricciones de identidad se habilita solamente en las restricciones keyref.

 

Referencias de clave (keyref)

Las referencias de clave comparan un conjunto de valores de un documento de instancia con otro conjunto de valores. En nuestro código XML de ejemplo (ver más arriba) podemos usar una referencia de clave para comprobar si los equipos que juegan partidos se enumeran en la lista de grupos. Si no es así, el documento XML no es válido.

 

Primero creamos una constante de unicidad o una restricción de clave key. En la imagen siguiente aparece la restricción de unicidad (unique) TeamsInGroups, que se creó en el elemento results. Esta restricción estipula que cada elemento team de group debe tener un atributo @name único.

IDCKeyref01

Después creamos la referencia de clave (keyref) TeamCheck, que selecciona el secundario team del elemento match y comprueba si el valor del atributo @name está presente entre los valores devueltos por TeamsInGroups, al que hace referencia (en la columna Refer).

En la imagen siguiente puede ver una representación gráfica de esta referencia de clave (resaltada en azul) junto con el ayudante de entrada Detalles (donde puede seleccionar también la restricción a la que se hace referencia). Las relaciones de la restricción seleccionada aparecen señaladas con una línea sólida de color verde. Las restricciones no seleccionadas se representan con una línea de puntos verdes. Además, por cada restricción de identidad, los nodos seleccionados por la expresión XPath para selector y field se identifica con los iconos IDCselector y IDCfield respectivamente. Si el nodo está contraído, la línea de relación termina en puntos suspensivos.

IDCContentModelView

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).

AssertEHDetails02XPDNS

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.

 

Id. de la restricciones de identidad

Puede asignar un Id. a la restricción de identidad, a su selector y a su field. Para asignar un Id., seleccione el componente y después escriba el identificador en el campo id del ayudante de entrada Detalles.

 

Ordenar restricciones de identidad

Puede ordenar las restricciones de la pestaña Restricciones de identidad haciendo clic en el icono Ordenar de la barra de herramientas de la pestaña. Aparece el cuadro de diálogo "Ordenar componentes" (imagen siguiente), donde puede elegir si se ordenan el componente resaltado y los componentes del mismo nivel o si se ordenan todos los componentes seleccionados. Puede mantener pulsada la tecla Mayús mientras hace clic en los componentes para seleccionar un grupo de componentes y pulsar la tecla Ctrl mientras hace clic para añadir más componentes al grupo seleccionado.

AttributesSortComponentsDlg

Después de seleccionar los componentes que desea ordenar, puede elija si se ordenan por orden alfabético (El nombre antes de la clase) o según el tipo de componente y por orden alfabético (es decir, las restricciones unique primero, después las restricciones key y por último las keyref).

 

El criterio de ordenación se implementa inmediatamente en el texto del esquema.

 

© 2018-2024 Altova GmbH