Как мне узнать, следует ли передавать LocalDate или OffsetDateTime в качестве параметра Saxon? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть элемент, который определен в XSD как:

<xsd:element name="publish_date" type="xsd:date"/>

И запрос:

/bks:books/book[publish_date = $p1]

, если я вызываю selector.setVariable (new QName ("p "+ (индекс + 1)), xdmValue); где xdmValue - это набор XdmAtomicValue из LocalDate - отлично работает. Но если я передаю int OffsetDateTime или LocalDateTime (тот же компонент даты) - запрос завершится неудачно.

Итак, как я могу узнать, какой объект datetime я должен использовать для создания XdmAtomicValue. Я могу преобразовать в любой, но мне нужно знать, в какой.

1 Ответ

0 голосов
/ 05 августа 2020

Существуют типы xs:date и xs:dateTime, и я думаю, что если вы используете new XdmAtomicValue(someLocaleDate), вы создаете значение xs:date, а использование new XdmAtomicValue(someOffsetDateTime) или new XdmAtomicValue(someLocaleDateTime) создает значение xs:dateTime.

В XPath нельзя напрямую сравнивать значение xs:date с xs:dateTime с = или другими операторами, вам придется преобразовать xs:date в xs:dateTime или xs:dateTime на xs:date, что можно сделать с помощью xs:date($p1) на стороне XPath.

Итак, для вашего использования API, если элемент, который вы хотите сравнить, имеет тип данных xs:date, я думаю вы также хотите передать значение xs:date, то есть на стороне Java вы начинаете с LocalDate.

...