Мое предпочтение при определении элемента, который может быть датой или пустым, - использовать тип списка с minLength = 0, maxLength = 1, а не использовать объединение xs: date и строки нулевой длины. Я думаю, что это лучше отражает семантику, согласно которой «пустой» случай представляет «нет даты», а не является чем-то существующим и имеет тип, отличный от даты. В этом случае типизированное значение всегда равно xs:date?
, что лучше соответствует семантике операторов сравнения XPath: теперь пустой регистр является пустой последовательностью, а не строкой. Если вы сделаете EndDate
типом списка таким образом, тогда сравнение будет
empty(EndDate) or EndDate gt StartDate
или, если хотите,
not(EndDate le StartDate)