Определите обязательные поля на основе другого значения поля в XSD - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть требование, когда я пытаюсь определить обязательные поля (minOccurs = 1) на основе другого значения поля в XSD, но не могу это сделать.

Я пытаюсь привести простой пример, чтобы понять мои проблема немного больше. Ниже приведены два простых xml, где state - это поле, которое определяет, какое событие произошло. Мне нужно определить processingTime и processResult как обязательные поля в файле XSD, если значение поля state равно PROCESS_END, потому что эти поля не нужны при запуске процесса. Это простой пример, иллюстрирующий мою проблему. Заранее спасибо.

<?xml version = "1.0"?>
<metadata>
    <title>The processing started event</title>
    <state>PROCESS_START</state>
</metadata>

<?xml version = "1.0"?>
<metadata>
    <title>The processing ended event</title>
    <state>PROCESS_END</state>
    <processingTime>100s</processingTime>
    <processResult>success</processResult>
</metadata>

1 Ответ

1 голос
/ 24 апреля 2020

В XSD 1.1 определите processingTime и processResult в качестве необязательных элементов, а в complexType для metadata определите <xs:assert test="if (state='PROCESS_END') then exists(processingTime) and exists(processResult) else true()"/>.

Это невозможно сделать в XSD 1.0. Многие из широко используемых валидаторов XSD, например, от Microsoft, никогда не обновлялись до XSD 1.1.

...