Espacios de nombre
Los espacios de nombres son usados en XML para cualificar nombres de elementos y atributos, evitando de esta manera conflictos entre nombres iguales. En caso de que haya varios elementos que posean el mismo nombre y el significado dependa del contexto, estos se pueden diferenciar mediante la asignación de espacios de nombres. El prefijo de un elemento (por ejemplo xsl: en <xsl:value-of>) funciona como la sigla del espacio de nombres URI asignado, el cual se indica normalmente en el elemento raíz. El prefijo es necesario también en expresiones XPath para seleccionar un determinado elemento dentro del espacio de nombres adecuado.
El elemento <ns> es necesario en nuestro ejemplo, ya que la instancia arca.xml tiene asignado el espacio de nombres "http://www.schematron.info/arche". Si se selecciona en Schematron un elemento perteneciente a este espacio de nombres mediante una expresión XPath, se debe añadir un elemento <ns> para definir un prefijo en este espacio de nombres.
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
<ns uri="http://www.schematron.info/arche" prefix="arc"/> (1)
<pattern>
<rule context="arc:animal[@carnivoro='sí']"> (2)
<report test="parent::*/arc:animal[@carnivoro='no']"> (2)
Hay animales carnívoros y herbívoros en un mismo compartimento.
¡Los animales no pueden ser utilizados como fuente de comida!
</report>
</rule>
</pattern>
</schema>
(1) | El elemento <ns> asigna un prefijo al espacio de nombres especificado en el atributo uri. |
(2) | Gracias al elemento <ns> puede usarse aquí el prefijo en la expresión XPath. Sin el elemento <ns> el prefijo no estaría definido. |
Nota para expertos en XPath y XML:
El elemento <ns> se puede omitir en teoría. No obstante, resultaría complejo evitar el uso de prefijos para la selección de elementos que no pertenezcan al espacio de nombres vacío. Esto se podría hacer por ejemplo mediante una consulta sobre el nombre local con la función local-name(). La expresión *[local-name()='animal'] coincide con todos los elementos <animal>, con independencia del espacio de nombres al que pertenezcan.
Se debe observar que en Schematron, a diferencia de XSLT, no es posible definir un espacio de nombres por defecto. Esto significa que los elementos de la instancia que pertenezcan a un espacio de nombres llevarán un prefijo en la localización. El prefijo deberá estar definido para el espacio de nombres correspondiente mediante el elemento <ns>. En caso de que existan diferentes espacios de nombres, debe haber un elemento <ns> en el esquema Schematron para cada uno de ellos.
<< anterior | siguiente >> |
Derechos de autor © dpunkt.verlag GmbH 2011
El usuario podrá imprimir la versión online. La copia será exclusivamente para uso personal. Por lo demás el presente capítulo del libro publicado en lengua alemana "Schematron - Effiziente Business Rules für XML-Dokumente" está sometido a los mismos términos y condiciones que la versión impresa. La presente obra está protegida en su totalidad por la ley de propiedad intelectual. Reservados todos los derechos, incluyendo los derechos de reproducción, traducción, microfilmación, así como el almacenamiento y procesamiento en sistemas electrónicos.
dpunkt.verlag GmbH, Ringstraße 19B, 69115 Heidelberg, teléfono + 49 (0) 6221 14830, fax + 49 (0) 6221 148399, hallo(at)dpunkt.de