Я работаю со следующим фрагментом XPathXPath неоднозначность
ancestor::contribution[1]/preceding-sibling::contribution[@speaker-reference][1]
Мои Java приложения (с использованием JDOM для XPath запросов) интерпретирует это по-другому из нашей базы данных Oracle (11g). я был в состоянии решить эту проблему с помощью скобок следующим образом:
(ancestor::contribution[1]/preceding-sibling::contribution[@speaker-reference])[1]
Таким образом, кажется, что JDOM читает XPath как «первый из всех предыдущих contributions
с атрибутом @speaker-reference
» в то время как Oracle считает, что «предыдущим contribution
с атрибутом @speaker-reference and position()=1
".
Я на самом деле предполагал первую интерпретацию. Мне интересно, какая из двух интерпретаций правильная в соответствии со спецификацией XPath (не может найти подходящее место для поиска) или спецификация позволяет выражениям быть неоднозначными.
не можете добавить короткий пример XML и показать, что вы ожидаете выбрать, и какие именно JDOM и Oracle на самом деле выбирают. Трудно следовать вашему анализу без примера. – wero
wero is right: существует более чем одна потенциальная причина, по которой две реализации могут отличаться, например.обратное направление оси и приоритет привязки. Без образца XML (с несколькими элементами '') трудно быть уверенным, что ваш анализ того, как работают JDOM и Oracle DB, является правильным и полным или для проверки того, какая реализация неверна. Я почти уверен, что дело не в двусмысленности XPath. –
LarsH
См. Также мой вопрос/ответ о том, как обратная ось влияет на значение предикатов позиции: http://stackoverflow.com/a/18524097/423105 – LarsH