2009-05-15 8 views
8

Por lo que sé, los nombres de tipos de elementos XML, así como los nombres de atributos distinguen entre mayúsculas y minúsculas.Cómo obtener elementos que no distinguen entre mayúsculas y minúsculas en XML

¿Hay alguna forma o truco para obtener elementos que no distingan entre mayúsculas y minúsculas?

Aclaración: Una gramática ha sido definida a través de XSD que se utiliza para algunos clientes para cargar datos. Los usuarios -los generadores de contenido- están creando archivos XML utilizando diferentes herramientas , pero muchas de ellas están utilizando editores de texto plano o lo que sea. Algunas veces, cuando esta gente intenta subir sus archivos, obtienen errores de incompatibilidad. Es un error común que mezclen las etiquetas lowerCase y upperCase, aunque es siempre fue claro que las etiquetas son sensibles a mayúsculas y minúsculas.

Tengo acceso al archivo XSD que define esta gramática y puedo cambiarla. La pregunta es cómo evitar este problema de etiquetas de mayúsculas/minúsculas propenso a errores.

¿Alguna idea?

¡Gracias de antemano!

+1

Gracias por las respuestas. En este caso, DESALENTEMENTE XML no se genera en máquina. Está escrito a mano :-) – Luixv

+0

¿No es una opción convertir la entrada a minúsculas? –

+0

No, no lo es. Los usuarios tienen una GUI desde donde cargan sus archivos directamente. – Luixv

Respuesta

0

XML se genera normalmente en máquina. Por lo tanto, no debería tener ningún problema real aquí ancho <RANdOm /> caso.

Si el problema real es que dos sistemas diferentes están generando dos tipos diferentes de la etiqueta (<Widget /> contra <widget />), supongo que podría simplemente definir ambos casos en su XSD.

1

Los procesadores XPath/Xslt distinguen entre mayúsculas y minúsculas. No pueden seleccionar un nodo/atributo si especifica el caso incorrecto.

En caso de que quiera dar salida al nombre de nodo y quiere que sea en mayúsculas, que puede hacer:

upper-case(local-name()) 
5

Si entiendo su problema correctamente, entonces los errores de casos sólo pueden ser corregidos entre la creación y la carga por una herramienta de análisis de terceros.

es decir XML Archivo> Parsed contra XSD y corregido> Subir aprobado

Usted puede hacer esto en tiempo de ejecución mediante el desarrollo de una aplicación contenedora para sus clientes para crear sus archivos XML en. Alternativamente, usted podría escribir una aplicación en el lado del servidor que toma el archivo cargado y verifica la sintaxis. De cualquier manera, vas a tener que tomar una decisión y luego hacer un poco de trabajo.

Mucho depende de la escala del problema. Si tiene etiquetas similares en diferentes casos en su XSD, p. y pero está recibiendo, necesitará una solución complicada basada en el conteo de nodos, etc.

Si está totalmente atrapado con clientes que utilizan casos aleatorios contra un XSD que solo contiene etiquetas en minúsculas, entonces debería poder analizar los archivos y convierta todas las etiquetas a minúsculas de una vez. Esto supone que el contenido entre las etiquetas es multi-caso y no se puede simplemente convertir el documento completo.

Cómo hacer esto depende de la mecánica de su situación. Obviamente, será más fácil lograr que los clientes verifiquen por error sus propios envíos.Si esto no es práctico, entonces deberá identificar una ventana de oportunidad en el proceso que le permitirá convertir el archivo al formato correcto antes de que se encuentren errores.

Hay demasiadas maneras de hacerlo para analizarlo aquí. Principalmente depende de los conjuntos de habilidades o finanzas disponibles para ti.

+0

lo que dices es correcto. Lo que estoy buscando es algo a nivel XSD. Quiero decir que preferiría evitar cambiar los métodos del lado del servidor si puedo resolver este problema a nivel XSD. – Luixv

+0

De todos modos, gracias por el comentario. Parece ser que a nivel XSD no hay forma. +1 – Luixv

+0

¡Gran respuesta, mucho de lo que hubiera dicho! +1 – Cerebrus

1

Como dijo @Melkisadek, la validación XSD existe para un propósito. Si permite que los usuarios carguen archivos con XML no válido, su aplicación puede fallar en algún momento cuando se acceda a los datos dentro de esos archivos. Además, todo el propósito de tener un XSD para validar el esquema XML de entrada es anulado. Si está dispuesto a renunciar a la función de validación de esquemas completa, necesitará usar un XSLT para convertir todas las etiquetas a mayúsculas o minúsculas como desee (consulte la respuesta de @Rashmi).

Sería análogo permitir que un usuario ingrese caracteres especiales en un campo de entrada de Número de Seguridad Social, simplemente porque el usuario se siente más cómodo al ingresar caracteres especiales (Sí, este ejemplo es tonto, no se podía pensar en uno mejor !)

Por lo tanto, en mi opinión, la solución consiste en mantener la validación del esquema tal como está, pero proporcionando a los usuarios una forma de validar el esquema antes de cargarlo. Por ejemplo, si se trata de una aplicación web, podría proporcionar un botón en la página que utiliza Javascript para validar el archivo con su esquema. Alternativamente, valide en el servidor solo cuando el archivo esté cargado. En ambos casos, proporcione los comentarios adecuados, como el número de línea en el que se encuentran las entidades errantes, la posición del personaje y el motivo para marcar un error.

0

Después de cargar, recorra el archivo XML (a través de DOM o SAX) y arregle la carcasa antes de validar?

1

En teoría, podría intentar hackear el esquema XML para validar los nombres de los elementos en mayúsculas incorrectamente.

Esto se puede hacer utilizando el mecanismo del grupo de sustitución en el esquema XML. Por ejemplo, si el esquema había definido:

<xsd:element name="foobar" type="xsd:string"/> 

entonces se podría añadir lo siguiente en el esquema XML:

<xsd:element name="Foobar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="fooBar" type="xsd:string" substitutionGroup="foobar"/> 
    <xsd:element name="FOOBAR" type="xsd:string" substitutionGroup="foobar"/> 

etc.

para tratar de anticipar los posibles errores que podrían hacer . Para cada elemento, podría haber 2^n combinación posible de casos, donde n es la longitud del nombre (suponiendo que cada carácter del nombre es una letra).

En la práctica, esto es demasiado problema, solo retrasa el problema en lugar de resolverlo, y probablemente no funcione. Si los usuarios no se dan cuenta de que XML distingue entre mayúsculas y minúsculas, es posible que no tengan etiquetas finales que coincidan con el caso de la etiqueta de inicio y aún así no se podrán validar.

Como han dicho otras personas, preprocesa la entrada enviada para solucionar el caso o para que los usuarios produzcan la entrada correcta antes de enviarla.

0

La solución es enviar simples en minúsculas todas las etiquetas/atributos cuando se carga xml de usuario y sólo entonces comprobar que más de xsd diseñado para todas las etiquetas minúsculas/atributos

Cuestiones relacionadas