XQuery 1.0
Temas de este apartado:
•Especificaciones con las que cumple el motor
•Comprobación de tipos estática y dinámica
•Compatibilidad con instrucciones XQuery
•Comportamiento propio de esta implementación
Especificaciones compatibles
El motor XQuery 1.0 de MapForce cumple con la recomendación XQuery 1.0 del 14 de diciembre de 2010 del W3C. El estándar XQuery concede libertad a la hora de implementar muchas características. A continuación explicamos cómo se implementaron estas características en el motor XQuery 1.0 de MapForce.
Compatibilidad con esquemas
El motor XQuery 1.0 es compatible con esquemas.
Codificación
El motor XQuery 1.0 es compatible con las codificaciones de caracteres UTF-8 y UTF-16.
Espacios de nombres
Se predefinen estos URI de espacios de nombres y sus enlaces asociados.
Espacio de nombres | Prefijo | URI del espacio de nombres |
Tipos XML Schema | xs: | http://www.w3.org/2001/XMLSchema |
Instancia de esquema | xsi: | http://www.w3.org/2001/XMLSchema-instance |
Funciones integradas | fn: | http://www.w3.org/2005/xpath-functions |
Funciones locales | local: | http://www.w3.org/2005/xquery-local-functions |
Es importante tener en cuenta que:
•El motor XQuery 1.0 entiende que los prefijos de la tabla anterior están enlazados con los correspondientes espacios de nombres.
•Como el espacio de nombres de funciones integradas (véase fn:) es el espacio de nombres de funciones predeterminado de XQuery, no es necesario usar el prefijo fn: cuando se invocan funciones integradas (p.ej. string("Hello") llamará a la función fn:string). No obstante, el prefijo fn: se puede utilizar para llamar a una función integrada sin necesidad de declarar el espacio de nombres en el prólogo de la consulta (p.ej.: fn:string("Hello")).
•Puede cambiar el espacio de nombres de funciones predeterminado declarando la expresión default function namespace en el prólogo de la consulta.
•Cuando use tipos del espacio de nombres XML Schema, puede usar el prefijo xs: sin necesidad de declarar los espacios de nombres de forma explícita ni enlazar estos prefijos a los espacios de nombres en el prólogo de la consulta. (p.ej.: xs:date y xs:yearMonthDuration.) Si quiere usar otros prefijos para el espacio de nombres de XML Schema, estos se deben declarar en el prólogo de la consulta. (p.ej.: declare namespace alt = "http://www.w3.org/2001/XMLSchema"; alt:date("2004-10-04").)
•Recuerde que los tipos de datos untypedAtomic, dayTimeDuration y yearMonthDuration se movieron del espacio de nombres XPath Datatypes al espacio de nombres XML Schema (es decir, ahora es xs:yearMonthDuration.)
Si se asignaron mal los espacios de nombres para funciones, constructores de tipo, pruebas de nodo, etc., se emite un error. Sin embargo, recuerde que algunas funciones se llaman igual que los tipos de datos de esquema, p.ej. fn:string y fn:boolean. (Se definen tanto xs:string como xs:boolean.) El prefijo del espacio de nombres determina si se usa la función o el constructor de tipo.
Documento XML de origen y validación
Los documentos XML que se utilizan para ejecutar un documento XQuery con el motor XQuery 1.0 deben tener un formato XML correcto. Sin embargo, no es necesario que sean válidos con respecto a un esquema XML. Si el archivo no es válido, el archivo no válido se carga sin información de esquema. Si el archivo XML está asociado a un esquema externo y es válido con respecto a dicho esquema, se genera información posterior a la validación de esquema, que se utilizará para evaluar la consulta.
Comprobación de tipos estática y dinámica
En la fase de análisis estático se revisan aspectos de la consulta como la sintaxis, si existen referencias externas (p.ej. para módulos), si las funciones y variables que se invocan están definidas, etc. Si se detecta un error en la fase de análisis estático, se notifica y la ejecución se interrumpe.
La comprobación dinámica de tipos se realiza en tiempo de ejecución, cuando la consulta se ejecuta. Si un tipo no es compatible con los requisitos de una operación, se emite un error. Por ejemplo, la expresión xs:string("1") + 1 devuelve un error porque la operación de suma no se puede llevar a cabo en un operando de tipo xs:string.
Módulos biblioteca
Los módulos biblioteca almacenan funciones y variables para poder volver a utilizarlas. El motor XQuery 1.0 es compatible con el uso de módulos almacenados en un solo archivo XQuery externo. Dicho archivo de módulo debe incluir una declaración module en su prólogo que apunte a un espacio de nombres de destino Por ejemplo:
module namespace libns="urn:module-library";
declare variable $libns:company := "Altova";
declare function libns:webaddress() { "https://www.altova.com" };
Todas las funciones y variables declaradas en el módulo pertenecen al espacio de nombres asociado al módulo. El módulo se importa en un archivo XQuery con la instrucción import module del prólogo de la consulta. La instrucción import module solamente importa funciones y variables declaradas directamente en el archivo de módulo biblioteca. Por ejemplo:
import module namespace modlib = "urn:module-library" at "modulefilename.xq";
if | ($modlib:company = "Altova") |
then | modlib:webaddress() |
else | error("No match found.") |
Funciones externas
Las funciones externas son incompatibles con el motor XQuery 1.0, es decir, todas las expresiones que usen la palabra clave external. Por ejemplo:
declare function hoo($param as xs:integer) as xs:string external;
La intercalación predeterminada es la intercalación de puntos de código Unicode, que compara las cadenas de texto según sus puntos de código Unicode. Otras intercalaciones compatibles son las intercalaciones ICU que se enumeran aquí. Para usar una intercalación concreta, indique su URI tal y como aparece en la lista de intercalaciones compatibles. Las comparaciones de cadenas de texto, incluidas las comparaciones para las funciones fn:max y fn:min, se harán según la intercalación especificada. Si no se indica la opción de intercalación, se utiliza la intercalación de puntos de código Unicode predeterminada.
•El tipo de datos xs:integer es de precisión arbitraria, es decir, puede representar un número de dígitos cualquiera.
•El tipo de datos xs:decimal tiene un límite de 20 dígitos después del punto decimal.
•Los tipos de datos xs:float y xs:double tienen una precisión limitada de 15 dígitos.
Compatibilidad con instrucciones XQuery
La instrucción Pragma no es compatible. Si se encuentra, se ignora y en su lugar se evalúa la expresión de reserva.
Comportamiento propio de esta implementación
A continuación puede ver una descripción de cómo enfocan los motores XQuery y XQuery Update 1.0 los aspectos relativos a la implementación de ciertas funciones.
unparsed-text
El atributo href acepta (i) rutas de acceso relativas para archivos que estén en la carpeta del URI base y (ii) rutas de acceso absolutas con o sin el protocolo file://. También son compatibles estas codificaciones específicas de Altova: x-binarytobase16 y x-binarytobase64. Ejemplo: xs:base64Binary(unparsed-text('chart.png', 'x-binarytobase64')).
unparsed-text-available
El argumento href acepta (i) rutas de acceso relativas para archivos que estén en la carpeta del URI base y (ii) rutas de acceso absolutas con o sin el protocolo file://. También son compatibles estas codificaciones específicas de Altova: x-binarytobase16 y x-binarytobase64.
Nota: | Estos valores de codificación estaban implementados en el ya descatalogado AltovaXML pero ya no se utilizan (son obsoletos): base16tobinary, base64tobinary, binarytobase16 y binarytobase64. |