За последние пару лет многие из наших внутренних API-интерфейсов для изменения и поиска в нашей базе данных все больше запутывались с конкретными потребностями и логикой приложения внешних интерфейсов, которыми они управляют. Чтобы противостоять этой тенденции, мы решили постепенно переместить эти API в веб-сервисы со стабильными и лаконично заданными интерфейсами. Другая причина этого шага заключается в том, что API изначально разрабатывались для традиционных веб-сайтов, а теперь они все чаще используются приложениями AJAX, приложениями для iPhone, внешними клиентами и т. Д.
При разработке деталей этого процесса мы поняли, что одной из основных функций, которые мы планируем предоставить, является довольно сложный поиск в различных типах ресурсов, таких как, например, люди, документы и местоположения.
Теперь очевидно, что детали поиска во многом зависят от пространства поиска. Однако существует множество мета-концепций, которые являются универсальными. Например, логические операторы, соединяющие предикаты поиска и иерархическую структуру (фигурные скобки) и правила приоритета для этих операций; диапазонные запросы для числовых значений, сопоставление регулярных выражений для строк и т. д. С учетом этих концепций XML сразу приходит на ум в качестве адекватного представления для запроса (как и DSL, но я думаю, что в нашем случае это слишком большое оружие).
Итак, мой вопрос заключается в следующем: существует ли метаязык XML, на котором мы можем основывать свой собственный, предметно-ориентированный диалект для выражения таких запросов? Или есть другие возможности, которые до сих пор не приходили нам в голову?