Существует ли общий язык запросов для произвольных множеств, независимых от языка программирования?
Я ищу способ определения запросов на множествах независимо от языка программирования или вида множеств.
Подробно это будет определение языка и реализации для распространенных языков, таких как Java, C++, Python и т. Д.
Как прокомментировано, я не ищу базу данных или какую-либо реализацию набора представлений, а только способ определить запрос для элементов, например, из std::set/vector
питон set()
или любая линейная структура, которая может рассматриваться как множество.
Близким примером будет что-то вроде jLinq, но без привязки к JSON или javascript и с четко определенным строковым представлением.
Конечно, не зная, какой структуры данных вам потребуется реализовать условный фильтр для каждой проблемы и каждого языка программирования, но способ построения строк запросов и их оценки будет понятен, и вам не придется писать парсеры.
Так что я хотел бы написать на Java или C++, что-то вроде
q = query()
.created_after("14.03.2010")
.and(contains("hello")
.or(contains("hallo")))
.sort("caption")
или записано в виде строки:
"(created_after("14.03.2010") and ( contains("hello") or contains("hallo"))) sort("caption")"
(это не продумано - просто чтобы показать, как может выглядеть интерфейс)
Хорошим примером для другой проблемы может служить JSON или XML: четкое определение языка и парсеры / инструменты для любой платформы или языка программирования.
2 ответа
Я знаю, что это старый вопрос, но я думаю, что знаю, что вы имеете в виду, и я действительно искал что-то подобное. Что вам нужно, это "анализатор поисковых запросов".
Я нашел search-query-parser для nodejs (я не автор). Еще не пробовал, но выглядит многообещающе. Пример в документации очень наглядный, вы бы получили входную строку из пользовательского интерфейса
from:hi@retrace.io,foo@gmail.com to:me subject:vacations date:1/10/2013-15/04/2014 photos
И библиотека будет разбирать его на структурированный объект JSON
{
from: ['hi@retrace.io', 'foo@gmail.com'],
to: 'me',
subject: 'vacations',
date: {
from: '1/10/2013',
to: '15/04/2014'
},
text: 'photos'
}
И из этого объекта вы можете создать и выполнить команду запроса к вашей базе данных. Как видите, он обрабатывает списки и диапазоны. Прямо сейчас я не вижу никакого логического оператора (И, ИЛИ), но я думаю, что это может быть легко реализовано.
Надеюсь это поможет.
В наши дни RSQL — хороший вариант. Доступно множество парсеров, а запросы оптимизированы для URL.