sábado, 27 de junio de 2009

XML

SQL SERVER 2005 incluye el manejo de datos de tipo XML en su base de datos, la cual proporciona diferentes herramientas para consultar, modificar Y validar datos XML.

Dentro de la posibilidades de manejo de XML en SQL SERVER están:

Almacenamiento nativo de datos XML
Conversión de datos relacionales a estructuras XML por medio de la Clausula FOR XML
Realizar consultas por medio de la sentencia OPENXML
Usar expresiones XQUERY
Creación de Indexes XML
Validación de estructuras XML por medio Esquemas XML

Clausula FOR XML

Esta clausula sirve para transformar información relacional en documentos XML.

Sintaxis

FOR XML
{
{ RAW [ ( 'ElementName' ) ] AUTO }
[

[ , { XMLDATA XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
[ , ELEMENTS [ XSINIL ABSENT ]
]
EXPLICIT
[

[ , XMLDATA ]
]
PATH [ ( 'ElementName' ) ]
[

[ , ELEMENTS [ XSINIL ABSENT ] ]
]
}
::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]


Para los siguientes ejemplos utilizaremos la siguiente consulta a la BD AdventureWorks















El significado de los parámetros es el siguiente:

*RAW: Transforma cada fila en un elemento XML que tiene un identificador genérico.
Si se especifica RAW (indentificador) el resultado seria el siguiente:








*AUTO: Devuelve un XML anidado donde la información de cada tabla utilizada en la consulta se convierte en un elemento


















*EXPLICIT: especifica el formato de XML

La siguiente consulta devuelve un formato parecido a resultado del ejercicio anterior.






















*PATH: Especifica un formato XML de una manera mas sencilla que utilizando la opción explicit
















*ELEMENTS: Devuelve las columnas como elementos en vez de atributos, aplica para las opciones AUTO y RAW

Ejemplo de auto con elements



















*ROOT: coloca un elementos raíz en el resultado de la consulta


















*TYPE: Devuelve los resultados como tipo de datos XML

*XMLDATA: Incluye en los resultados el schema (XDR)














*XMLSCHEMA: incluye en los resultados el schema (XSD)














*XSINIL: crea elementos para los valores nulos

OPEN XML

OPEN XML Transforma datos XML en datos relacionales.

OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]])
[WITH (SchemaDeclaration TableName)]


Los siguientes ejemplos se realizaran basados en el siguiente XML

Para comenzar debemos declara las variable que almacenara el XML y el puntero al documento XML preparado












Después preparamos el documento para que nos pase el puntero que necesita el OPEN XML para realizar la consulta

















Como podrán observar a la instrucción se le paso la variable @Hdoc que tiene el puntero a la representación del documento XML, se especifico la ruta @ '/ROOT/Customers/Orders/Order_Details' para tenerlo como referencia de búsqueda en los valores

Las variables que están en el Xpath se especifican con una @ mas el nombre del atributo, los que están en elementos superiores deben especificar tantos ../ necesarios para ubicarse en el elemento respectivo y los que están en elementos inferiores deben especificar la ruta .

Si se quiere extraer el contenido de un elemento se puede realizar especificando el xpath y en ves de utilizar @NombreVariable se coloca Text()

XQUERY

Es una herramienta que se utiliza para realizar consultas sobre fuentes de datos XML y esta implementado en los tipos de datos XML de sql server 2005

Posee 5 métodos:

*Query
*Value
*Exist
*Node
*Modify

Para la explicación vamos a utilizar el siguiente documento XML











Metodo Query

Sirve para extraer fragmentos XML por medio de expresiones XQUERY














Metodo Value

Sirve para devolver un único valor







Metodo Exist

Sirve para determinar la existencia de un nodo en el documento, devuelve 1 si encuentra alguna coincidencia en caso contrario devuelve 0






Metodo Modify (XML DML)

Sirve para insertar, modificar y eliminar nodos en un XML

Clausula insert

insert Expression1 (
{as first as last} into after before
Expression2 )













Clausula replace

replace value of Expression1 with Expression2










Clausula delete

delete Expression





Metodo Nodes

Extrae los datos XML en formato relacional









Este método también se puede utilizar en columnas tipo XML de la siguiente manera










Inserciones masivas

INSERT INTO Tbl_orders(Xmldata)
SELECT * FROM OPENROWSET(
BULK 'c:\Sybex\OpenRowsetXmldata.xml',
SINGLE_BLOB) AS x


Se utiliza Single_Blob ya que admite mas codificaciones de Windows

SINGLE_CLOB: lee los datos com ASCII
SINGLE_NLOB: lee los datos como Unicode

Índices XML

Para crear indices XML debe cumplirse los siguientes requerimientos

*La tabla que contiene la columna XML debe tener una llave primaria Closterado
*Si cambias la llave primaria debes eliminar todas los índices XML y volver a créalos después de realizar al cambio en la llave primaria
*Puedes tener un primary index xml por columna
*No se pueden tener un xml índice y un no xml índice con el mismo nombre en la mimas tabla
*No puedes usar las opciones IGNORE_DEP_KEY y ONLINE cuando creas el índice
*No puedes crear índices XML en vistas, Variable tipo tabla ni variables XML
*Debes eliminar un índice XML si quiere cambiar el tipo de índice
*Debes activar la opción ARITHABORT cuando creas un índice XML o cuando realizas alguna acción DML en la columna XML

Los índices XML están compuesto por un índice primario y un secundario

El índice XML primario realiza una representación B-tree delos nodos XML. La sintaxis de creación es la siguiente

CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription)


El Índice XML secundario es un índice no Closterado del índice primario. Existen 3 tipos.

Índice PATH : mejora el rendimiento de consultas que utilizan PATH y VALUE para seleccionar datos, como por ejemplo la consultas que utilizan el método exist en el where de una consulta. /ItemList/Item[@ProductID="1"]

CREATE XML INDEX XMLPATH_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR PATH

Indice VALUE: mejora el rendimiento de consultas que utilizan VALUES para seleccionar datos. Ideal para busquedas de un valor que puede aparecer en diferentes partes del xml. //Item[@ProductID="1"]

CREATE XML INDEX XMLVALUE_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR VALUE


Indice PROPERTY: mejora el rendimiento de consultas que utilizan VALUES para extraer datos-(/ItemList/Item/@ProductID)[1]

CREATE XML INDEX XMLPROPERTY_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR PROPERTY



No hay comentarios:

Publicar un comentario