Ich versuche, eine XSD für die folgende XML zu erstellen, und ich JAXB verwenden, um Java-Objekt mit Validierung entpacken.Wie wird ein Element basierend auf einem 'type' Attributwert benötigt?
Die Validierungsregel besteht darin, dass die ersten 2 Elemente in , die type = jobType
und type = customer
sind, erforderlich sind. Alle anderen innerhalb JobParam
sind optional.
Wie erstelle ich eine XSD dafür?
<job>
<jobName>core</jobName>
<jobParams>
<jobParam type="jobType">Scheduler</jobParam>
<jobParam type="customer">Alphabet</jobParam>
<jobParam type="mode">music</jobParam>
</jobParams>
</job>
Danke. Ich wünschte, ich könnte das XML ändern und ich stimme Ihrem Vorschlag zu. Aber das ist zur Zeit nicht möglich. Die Clientbenutzer dieser XML-Datei sind nicht bereit, sie zu aktualisieren. Heute behandle ich diese Validierung für Java-Objekte. Jedoch können nicht alle Fälle effektiv mit Java-Code behandelt werden. Wenn die XML-Datei beispielsweise doppelte JobParam-Elemente enthält Zeitplaner –
SAK
Wenn Sie das XML nicht umgestalten können, sind Ihre Optionen ** (a) ** Verschieben nach XSD 1.1, ** (b) * * Erzwinge diese Einschränkung außerhalb von XSD (z. B. in Java) oder ** (c) ** setze die Einschränkung, dass 'jobParam [@ type =' jobType '] 'und' jobParam [@ type =' customer '] '' muss anwesend sein. XSD 1.0 kann diese Einschränkung angesichts des ursprünglichen XML-Entwurfs einfach nicht ausdrücken. Die in Ihrem Kommentar erwähnte zusätzliche Einschränkung ist ähnlich. (Weder sollte in Java schwer zu implementieren sein - es wäre einfach nicht ideal, um Validierungsbeschränkungen deklarativ im XSD zu zentralisieren.) – kjhughes