Проверить перечисление на основе диапазонов дат в XSD 1.0?

В XSD я хотел бы определить тип Country, включая ограничение, которое устанавливает список имен стран, которые можно использовать. Это можно легко сделать, используя перечисление в качестве ограничения.

Однако этот список будет меняться с течением времени. Например: в прошлом у нас была Югославия, которой больше нет; Вместо них появились Хорватия, Словения и т.д. Таким образом, у страны будет дата начала и (потенциально) дата окончания. StartDate и EndDate будут устанавливать диапазон дат существования для каждой конкретной страны.

При проверке XML я хотел бы проверить, относится ли XML к существующей стране. Поэтому XML также будет содержать переменную ReferenceDate, которая будет использоваться для проверки StartDate и EndDate.

На самом деле я хотел бы определить тип Country с набором атрибутов CountryName, StartDate и Enddate. При проверке XML, например, со значениями Хорватия и ReferenceDate, я хотел бы проверить, является ли Хорватия допустимой страной на дату ReferenceDate, используя тип Country, определенный в XSD.

Любые идеи с ограничением, учитывая, что я использую XSD 1.0?


person Jan    schedule 10.02.2021    source источник


Ответы (2)


XSD 1.0

Ваши ограничения не могут быть применены.

XSD 1.1

Вы можете написать утверждение, чтобы убедиться, что current-date() находится в пределах диапазона значений в документе экземпляра XML. Вы не можете делать утверждения в диапазонах, заданных типами в XSD.

Ваши ограничения, как указано, вероятно, лучше всего применять с помощью пользовательского кода приложения.

person kjhughes    schedule 10.02.2021
comment
проблема в том, что я не могу использовать XSD 1.1, потому что не каждый участник процесса может справиться с этим - person Jan; 11.02.2021
comment
Проблема в том, что ваши ограничения не могут быть выражены только в XSD 1.0 или даже в XSD 1.1, как я упоминал в ответе. Если вы все еще хотите проверить ограничения, которые вы описываете, вам придется сделать это отдельно от проверки XSD, используя, например, XSLT или Schematron или проверку на основе другого языка. - person kjhughes; 11.02.2021
comment
да, вы совершенно правы. На самом деле я буду использовать XSLT для обработки XML-файла. Таким образом, файл XML будет содержать значение Хорватия для страны и ReferenceDate YMD. Как бы вы перечислили все страны с их датами начала и окончания, чтобы сделать их доступными для XSLT? - person Jan; 11.02.2021
comment
Я бы посоветовал вам завершить этот вопрос, приняв ответ, который помог вам больше всего на данный момент, и задать новый вопрос, но только после того, как сначала попробуете такую ​​XSLT-программу. Как обычно здесь, лучше сосредоточиться на конкретных тупиковых ситуациях, чем запрашивать общее руководство по проектированию. Спасибо. - person kjhughes; 11.02.2021

Вы могли бы рассмотреть структуру, которая позволяет вам генерировать схему, соответствующую определенной дате (обычно путем применения преобразования XSLT к какой-либо метасхеме).

Например, ваша метасхема может быть, по сути, файлом XSD, в котором любой элемент может иметь атрибуты даты начала и даты окончания, и вы можете очень легко обработать это с помощью XSLT, чтобы сохранить только те элементы, которые применяются к определенной дате.

person Michael Kay    schedule 10.02.2021
comment
Я действительно рассматривал такую ​​​​вещь, проблема, однако, заключается в том, что каждый XML, который необходимо проверить, может иметь другую контрольную дату (в тот момент я не очень понял, так как использовал ActualDate). Что приведет к множеству списков - person Jan; 11.02.2021