Pregunta

Mi requisito es para validar un xml con dos diferentes estrategias de validación. En la estrategia 1, se requiere que el xml tener instancias de un elemento con ciertos atributos requeridos. En la estrategia 2, se requiere que el XML para tener instancias de un mismo elemento con diferentes atributos requeridos. Por lo tanto, la idea es que hay dos conjuntos diferentes de un mismo elemento con diferente conjunto de atributos necesarios para cada conjunto. ¿Hay una manera de validar esto con el uso de una sola xsd. Mi única solución hasta ahora es utilizar dos archivos XSD para validar diferentes.

Ejemplo 1:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!--required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- not required -->
<root>

Ejemplo 2:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <element firstName="something"/> <!-- not required -->
    <element lastName="something"/> <!-- required -->
 <element phoneNumber="something"/> <!-- required -->
<root>

¿Se puede lograr la validación por xsd?

¿Fue útil?

Solución

Rick,

He tenido problemas similares para resolver en nuestras aplicaciones, y nuestra mejor solución ha sido utilizar esquemas modularizados.

Así que en lugar de tener SCHEMA1 y Schema2 que son duplicados de uno al otro a excepción de la parte que es diferente, usted tiene SCHEMA1 y Schema2 que incluyen sólo las limitaciones que son diferentes, y tanto la importación de un Schema3 común que define las restricciones que se comparten .

Un ejemplo de cómo hacerlo es aquí .

No se dan una sola XSD, pero sí reducir la duplicación, por lo que ayuda con el mantenimiento y ayuda a evitar la posibilidad de que se produzcan errores cuando se tiene mucha duplicación entre SCHEMA1 y Schema2.

La desventaja es que los esquemas se vuelven un poco más difícil para los seres humanos a seguir, dado que las definiciones se dividen entre los diferentes archivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top