Frage

Meine Forderung ist eine XML mit zwei verschiedenen Validierungsstrategien zu validieren. In Strategie 1 wird die xml erforderlich Instanzen eines Elements mit bestimmten erforderlichen Attribute zu haben. In Strategie 2 wird die xml erforderlich Instanzen des gleichen Elements mit unterschiedlichen erforderlichen Attributen zu haben. So ist die Idee, dass es zwei verschiedene Sätze des gleichen Elements mit anderem Satz von erforderlichen Attributen für jeden Satz. Gibt es eine Möglichkeit, dies zu überprüfen, mit nur einem XSD verwenden. Meine einzige Lösung bisher zwei verschiedene XSD-Dateien zu validieren, zu verwenden.

Beispiel 1:

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

Beispiel 2:

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

Kann die Validierung durch xsd erreicht werden?

War es hilfreich?

Lösung

Rick,

Ich habe ähnliche Probleme hatte in unseren Anwendungen zu lösen, und unsere beste Lösung wurde modularisiert Schemata zu verwenden.

Also statt Schema1 und schema2 zu haben, die Duplikate voneinander sind, außer für den Teil, der anders ist, haben Sie Schema1 und schema2, die nur die Beschränkungen enthalten, die verschieden sind, und beide Import eine gemeinsame Schema3, die die Beschränkungen definiert, die gemeinsam genutzt werden .

Ein Beispiel, wie das zu tun ist hier .

Es gibt Ihnen nicht eine einzige XSD, aber es Vervielfältigung nicht reduziert, so dass es mit Wartbarkeit hilft und hilft, die Wahrscheinlichkeit von Fehlern zu vermeiden einschleichen, wenn Sie viele Überschneidungen zwischen Schema1 und schema2 haben.

Der Nachteil ist, dass die Schemata ein wenig schwieriger geworden, für den Menschen zu folgen, weil die Definitionen aufgeteilt zwischen verschiedenen Dateien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top