Estoy intentando desarrollar un esquema que valide algunos archivos XML existentes que heredé. Me gustaría que el esquema haga la mayor parte del trabajo de validación posible. El desafío es que los atributos y los elementos dependen de los valores de otros atributos.Creación de un esquema XML con atributos y elementos contingentes a otros atributos
La información real es bastante abstracta, así que he creado algunos ejemplos simples. Digamos que tengo los siguientes archivos XML:
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="human" nationality="British">
<Address>London</Address>
</Creature>
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="animal" species="Tiger">
<Habitat>Jungle</Habitat>
</Creature>
Si "tipo" de la criatura es "humano", voy a tener un atributo de "nacionalidad" y una "dirección" elemento secundario. Si el "tipo" de la criatura es "animal", tendré un atributo "especie" y un elemento secundario "Hábitat". A los fines de este ejemplo, un "humano" con una "especie" o un "Hábitat" sería inválido, al igual que un "animal" con una "nacionalidad" o "Dirección".
Si "Criatura" no era el elemento raíz, probablemente podría tener dos opciones diferentes de "Criatura" debajo del elemento raíz, pero no veo cómo puedo hacer que esto funcione cuando "Criatura" es el elemento raíz .
¿Hay alguna forma de crear un esquema para estos archivos que solo coincida con documentos válidos? Si es así, ¿cómo lo haré?
Gracias por la respuesta muy precisa y excelente ejemplo en su solución. Me acabas de ahorrar horas de búsqueda en Internet –
¡Gran ejemplo! ¿Podría explicar por qué 'xsi: type' funciona mientras' type' no aparece en los archivos XML? – Praetorian
Excelente paradigma! Pero en mi especificación de nivel de juego XML, * I * quiero especificar la especificación, y no XML Schema (prefiero "tipo" y no "xsi: tipo"). Entonces, ¿esto es una debilidad del esquema XML? – Chameleon