El analizador
XML de Microsoft (MSXML.DLL) incluido con Microsoft® Windows® 2000
es esencialmente una versión de Service Pack. Contiene algunas características
nuevas y un gran número de soluciones a problemas. Esta versión de
MSXML.DLL también está disponible en la versión Web de Internet Explorer
5.01, de modo que también funciona en Windows NT 4.0. No obstante,
la diferencia más notable entre esta versión del analizador y su predecesora
es la sustancial mejora realizada en las áreas de confiabilidad y
escala. La nueva versión del analizador está mejor equipada para el
servidor, gracias a las mejoras de rendimiento en situaciones de carga
y de escala en situaciones de varios procesadores.
La diferencia más notable es
la sustancial mejora realizada en las áreas de confiabilidad y escala.
En este artículo se perfilan las
nuevas características del analizador y se describen los cambios
de comportamiento que afectan a su funcionalidad. Para obtener más
información sobre las nuevas características, consulte la documentación
de referencia sobre XML en XML
Developer Center (en inglés).
Nuevas características del analizador
XML de Microsoft
En este artículo se describen con
detalle las siguientes características nuevas del analizador XML
de Microsoft:
- Compatibilidad con tipos de datos
en atributos
- Elementos como tipo "id"
- Tipos de datos como nombres de
elementos
- Creación de instancias de objetos
COM en bloques de secuencias de comandos XSL
Compatibilidad con tipos de datos
en atributos
La compatibilidad con tipos de datos
proporcionada con la versión de Internet Explorer 5 del analizador
XML de Microsoft se ha ampliado para incluir compatibilidad con
tipos de datos simples (como "int", "float"
y "date") en los atributos. Si desea ver la lista completa
de los tipos de datos simples compatibles, consulte la documentación
de referencia sobre esquemas de datos XML.
La mayor compatibilidad con tipos
de datos del analizador permite tener datos centrados en los atributos
a los que todavía se les puede asignar un tipo de datos. El tipo
de datos se puede declarar en un nodo de atributo a través de un
esquema, igual que se declara en un nodo de elemento. Utilice el
atributo dt:type en el elemento AttributeType:
<AttributeType name="y" dt:type="int"/>
<ElementType name="x">
<attribute type="y"/>
</ElementType>
Elementos como tipo "id"
Los elementos pueden tener ahora
el tipo "id", como se muestra en el código siguiente:
<foo xmlns:dt="urn:schemas-microsoft-com:datatypes">
<bar dt:dt="id">fooid</bar>
</foo>
El elemento bar tiene el tipo
"id", lo que significa que el valor de texto del elemento
bar se puede utilizar para hacer referencia al elemento foo.
Además de asignar el tipo "id" al elemento de la instancia,
el esquema también se puede utilizar para asignar el tipo "id"
al elemento.
Una vez asignado el tipo "id"
a un elemento, se puede hacer referencia al elemento primario del
mismo con el valor del elemento id. Por ejemplo, si pasase
la cadena "fooid" al método nodeFromID, dicho método
devolvería el elemento foo.
xmldoc.nodeFromID("fooid")
Tipos de datos como nombres de elementos
Actualmente, los tipos de datos se
pueden declarar en la instancia, con el atributo dt:dt, o
en el esquema, ya sea con el atributo dt:type o con el elemento
datatype. En la versión de Windows 2000 del analizador XML
de Microsoft, también se pueden asignar tipos a los elementos a
través de sus nombres.
El elemento XML siguiente es del
tipo entero (integer), pues su nombre pertenece al espacio de nombre
"urn:schemas-microsoft-com:datatypes", y tiene un nombre
local que constituye un tipo de datos válido, "int":
<dt:int>8</dt:int>
Esta nueva forma de asignación de
tipos a los elementos supone un método taquigráfico para crear elementos
con tipos.
Creación de instancias de objetos
COM en bloques de secuencias de comandos XSL
En la versión del analizador XML
de Microsoft incluida con Internet Explorer 5, no se permitía la
creación de instancias de objetos COM en bloques xsl:script por
motivos de seguridad. Este problema se ha solucionado en la versión
de Windows 2000 del analizador XML de Microsoft, de modo que ahora
se pueden crear instancias de objetos COM en bloques xsl:script
con seguridad.
Cambios en el comportamiento del
analizador XML de Microsoft
En la versión de Windows 2000 del
analizador XML de Microsoft se han introducido algunos cambios de
comportamiento. Dichos cambios son consecuencia de la solución de
algunos problemas y de los comentarios de los clientes. En la tabla
siguiente se enumeran las soluciones a problemas que podrían causar
cambios no previstos en su comportamiento.
Soluciones a problemas
| Área
funcional |
Descripción
del problema |
Comentarios |
| Patrones XSL |
Una consulta con // devuelve
duplicados cuando los elementos se definen con una entidad. |
Ahora no se permite la exploración
de patrones XSL en el contenido de un nodo DocumentType. |
| Tipos de datos |
El elemento mantiene el tipo
de datos incluso después de la declaración de tipo de datos
(es decir, se quita "dt:dt='int'"). |
El elemento deja de mantener
su tipo de datos al quitar la declaración de tipo de datos. |
| Espacios de nombres |
Se permiten espacios de nombres
reservados para calificar a los elementos. |
El usuario no puede establecer
el prefijo "xml" en ninguna combinación de letras
mayúsculas o minúsculas. Se trata de un prefijo de espacio de
nombres reservado. |
| Espacios de nombres |
No se mantienen las declaraciones
de espacio de nombres en los elementos vacíos. |
Ahora se mantienen las declaraciones
de espacio de nombres en los elementos vacíos. |
| Tipos de datos |
La validación del tipo de datos
se produce antes de las transformaciones XSL. Esto hace que
elementos XSL como el siguiente causen errores:
<price dt:dt="number">
<xsl:value-of select="price"/>
</price> |
El analizador XML de Microsoft
ya no valida el tipo de datos antes de que XSL pueda realizar
la transformación. |
| Objeto de origen de datos XML |
El evento oncellchange
se activa dos veces. |
El evento oncellchange
se activa ahora una sola vez por cada cambio en los datos. |
| Modelo de objetos |
Al obtener la propiedad previousSibling
del primer elemento secundario de un elemento, se devuelve el
último atributo de la colección attributes del elemento
primario (si la colección attribute no está vacía). |
La propiedad previousSibling
del primer elemento secundario de un elemento devuelve ahora
un valor nulo (con independencia de que la colección attributes
del elemento primario esté vacía). |
| Modelo de objetos |
Un elemento clonado mantenía
las asignaciones de Id. del documento original (es decir, la
exploración por Id. le devolvía al documento original). |
Los identificadores de un documento
clonado se asignan a nodos de dicho documento clonado, no a
los nodos del documento original. |
| Modelo de objetos |
Los documentos clonados no
contienen un clon del subconjunto interno del documento original. |
Los documentos clonados contienen
ahora un clon del subconjunto interno del documento original
(si existe). |
| DSO XML |
Al establecer la propiedad
documentElement para reemplazar el elemento raíz, no
se reconstruye la forma del recordset. |
Al establecer la propiedad
documentElement para reemplazar el elemento raíz, se
reconstruye la forma del recordset. |
| Validación |
Se permite que exista XML no
válido en un DTD (como valor de una entidad). |
Ya no se permite que exista
XML no válido en un DTD (una vez resuelta la entidad). |
| Modelo de objetos |
No hay mensajes de error en
Visual Basic®. |
Los mensajes de error están
ahora disponibles en Visual Basic. |
| Modelo de objetos |
Al establecer la propiedad
nodeTypedValue de un elemento de tipo booleano, se genera
XML no válido después de mantenerlo. |
El valor "1" se mantiene
ahora cuando el valor booleano se establece con "true"
en lugar de "-1". El valor "-1" no es válido
para los nodos de tipo booleano. |
| Modelo de objetos de IE4 |
Valor de atributo no compatible
con Internet Explorer 4.0. |
\t y las nuevas líneas se han
convertido en ' ' (espacio) en los valores de atributo.
Esto sí es compatible con la implementación de Internet Explorer
4.0. |
| Analizador |
La versión 2.0 del analizador
XML de Microsoft no es compatible con la codificación "us-ascii". |
El analizador XML de Microsoft
es ahora compatible con "us-ascii". |
| Modelo de objetos |
No normalizar las nuevas líneas
es un gran problema para las aplicaciones XML basadas en HTML. |
Los retornos de carro y las
nuevas líneas se convierten ahora en nuevas líneas. |
| Modelo de objetos |
Al cargar un documento XML
con el método loadXML, resolveExternals se ve
forzado a devolver False. |
Si no hay contexto de seguridad
(como en C, C++ o un comportamiento HTML), la propiedad resolveExternals
es False. Si hay un contexto de seguridad (como en una página
HTML), se debe establecer con True. |
| Modelo de objetos |
El método loadXML devuelve
S_FALSE si el parámetro isSuccessful es NULL. |
El analizador XML de Microsoft
sólo devuelve S_FALSE en los errores de análisis. |
| Analizador |
La versión 2.0 del analizador
XML de Microsoft no puede controlar las entidades de parámetros
utilizadas en declaraciones de elementos como la siguiente:
<!ELEMENT document (%inline;)> |
Ahora el analizador analiza
correctamente las entidades de parámetros en declaraciones de
elementos:
<!ELEMENT document (%inline;)> |
| Tipos de datos |
La implementación de bin.base64
no es correcta. La versión 2.0 del analizador XML de Microsoft
reconoce "*" en lugar de "/" en el juego
de caracteres. |
El juego de caracteres base64
es:
'ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz0123456789+/'. El analizador XML de
Microsoft lo reconoce ahora correctamente. |
| XSL |
Las secuencias de comandos
de XSL pueden modificar el DOM de Internet Explorer, pero no
de otros contenedores. |
El analizador XML de Microsoft
no puede modificar el DOM, independientemente del contenedor. |
| DSO XML |
El campo $Text y el valor de
texto del nodo que se asigna a dicho campo tienen valores distintos. |
El campo $Text y los campos
de valor de los nodos se han normalizado. |
| XSL |
XSL expone atributos "dt"
para los tipos de datos definidos en un esquema. |
El atributo dt:dt no
se expone en el árbol DOM cuando los tipos de datos se definen
mediante un esquema. |
| Analizador |
Los identificadores incluidos
en declaraciones de entidad se registran. |
El analizador XML de Microsoft
ya no registra los identificadores incluidos en declaraciones
de entidad. |
Otros cambios en el comportamiento
Los cambios que se describen a continuación
se han extraído de los comentarios de los clientes y podrían alterar
el comportamiento de las aplicaciones:
- Los URNs de Microsoft no distinguen
mayúsculas de minúsculas.
- Si se llama dos veces a id(),
haciendo referencia al mismo nodo, se atenderá a la segunda referencia.
- Al obtener acceso a la propiedad
namespaceURI de un atributo xmlns:foo y xml:space,
se obtendrá "http://www.w3.org/XML/1998/namespace" y
"", respectivamente. Este cambio es actualmente un error
y supone una alteración del comportamiento correcto del analizador
XML de Microsoft incluido con Internet Explorer 5, el cual se
corregirá en una futura versión.
Carga y ganancias de rendimiento
Se ha solucionado un problema de
contención en el nivel de automatización para que el analizador
se escale de forma positiva al utilizarlo en un archivo de páginas
Active Server (ASP). En equipos con varios procesadores, esto significa
que el rendimiento de los archivos .asp con XML aumentará radicalmente. En
el gráfico siguiente se ilustran estas ganancias, donde el eje x
es el número de procesadores y el eje y es el número de solicitudes
ASP por segundo:
La medición se realizó con una página
XML.ASP sencilla que realizaba algunas operaciones en el árbol DOM.
Asimismo, se han solucionado varios
errores de carga para mejorar sustancialmente la confiabilidad del
analizador en situaciones de carga. El analizador es ahora mucho
más confiable en situaciones de carga, prueba de lo cual es la distribución
del analizador por parte de Microsoft.com en algunos de sus sitios
más utilizados.
|