2010-02-28 7 views
7

Estoy tratando de trabajar con C# y XML en una aplicación multiplataforma (la mayor parte del desarrollo está en MonoDevelop en Linux, pero la mayoría de los usuarios terminarán usando el front-end de WinForms que hago en Visual Studio). Mono se está comportando como esperaba, pero .Net no lo está y estoy buscando opciones y alternativas.¿Cómo puedo usar otra/más validación de esquema moderna con .Net?

Los esquemas tienen varios elementos opcionales seguidos de un elemento "xs: any". Esto funciona perfectamente bien en Mono, pero no en .Net de Microsoft, ya que se queja de que la aparición del elemento opcional es ambigua entre su definición real en el esquema y "xs: any". A partir de un poco de lectura, parece ser un problema que se resolvió en versiones posteriores de la definición de Esquema del W3C. Obviamente Mono se ha mantenido actualizado, pero Microsoft se está quedando atrás.

Las opciones que puedo ver son:

1) Uso RelaxNG - por desgracia, el enlace desde el sitio principal para la implementación en C# se ha roto. Es parte de Mono, pero eso no es de mucha ayuda cuando se ejecuta en MS '.Net. La única forma en que puedo ver para hacerlo es duplicar y reconstruir Mono's version como mi propia DLL

2) Usar Schematron - Lo encontré como una sugerencia para hacer XML compatible hacia adelante y hacia atrás, pero parece ser más como un validador de formato que un lenguaje de esquema 'estándar'. No estoy seguro de dónde está la implementación; todo lo que puedo encontrar es un validador de línea de comandos.

3) Asegúrese de que la implementación de MS .Net utiliza el estándar de esquema actualizado que también utiliza Mono - No sé ni siquiera si esto es posible.

4) Siga los esquemas feos y ponga "xs: any" dentro de un elemento opcional de "extensiones" - lo anida sin ninguna otra razón que no sea la oficial. El framework .Net no se confunde, pero funciona.

El código está dirigido a .Net 2.0, pero tengo 3.5 instalados en mi máquina. También estoy trabajando con Mono 2.4, MonoDevelop 2.2 y Visual Studio Express 2005.

¿Alguno de los 1-3 posibles, o estoy atascado con 4?

Gracias.

+0

Proporcione un enlace que diga que la regla de UPA ha cambiado. Aquí es donde dices que el W3C ha actualizado la versión del esquema. –

+1

Creo que esto se aborda en el último borrador de trabajo (http://www.w3.org/TR/xmlschema11-1/#sec-cos-nonambig), que no elimina la restricción de UPA pero hace un caso especial de cómo para manejar un conflicto entre un elemento y un comodín. Como se trata de un borrador, no se puede culpar a Microsoft. Tal vez no es que Mono está más actualizado, sino que no implementaron la verificación UPA. Personalmente, no recomendaría diseñar aplicaciones que dependan de un borrador de especificación, pero eso depende de OP ... –

+0

@binarycoder: gracias. No había oído hablar de esto, por lo que estaba seguro de que no formaba parte de ninguna especificación final. –

Respuesta

4

Puede evitar el problema de ambigüedad configurando XmlSchemaSet.CompilationSettings.EnableUpaCheck en falso. UPA representa el requisito de Atribución única de partículas del estándar XML Schema al que hizo referencia.

+1

En otras palabras, la validación de esquema de Microsoft le informa acerca de un problema con su esquema; es ambiguo. –

+1

Correcto, esto definitivamente es un problema con el esquema según el estándar actual. Esto se afloja en XML Schema 1.1, con la advertencia de que solo tiene un estado de "borrador de trabajo". –

+0

@binarycoder: y el punto es que, en el nivel de Working Draft, y dado que es una versión diferente del estándar, es poco probable que Mono esté implementando la versión posterior del estándar y que Microsoft esté rezagado. –

0

Contribuí a la resurrección de un schematron ISO implementado en C#. Está disponible en github here.

Cuestiones relacionadas