Существует ли метаязык XML для выражения сложных поисковых запросов? - PullRequest
3 голосов
/ 24 ноября 2010

За последние пару лет многие из наших внутренних API-интерфейсов для изменения и поиска в нашей базе данных все больше запутывались с конкретными потребностями и логикой приложения внешних интерфейсов, которыми они управляют. Чтобы противостоять этой тенденции, мы решили постепенно переместить эти API в веб-сервисы со стабильными и лаконично заданными интерфейсами. Другая причина этого шага заключается в том, что API изначально разрабатывались для традиционных веб-сайтов, а теперь они все чаще используются приложениями AJAX, приложениями для iPhone, внешними клиентами и т. Д.

При разработке деталей этого процесса мы поняли, что одной из основных функций, которые мы планируем предоставить, является довольно сложный поиск в различных типах ресурсов, таких как, например, люди, документы и местоположения.

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

Итак, мой вопрос заключается в следующем: существует ли метаязык XML, на котором мы можем основывать свой собственный, предметно-ориентированный диалект для выражения таких запросов? Или есть другие возможности, которые до сих пор не приходили нам в голову?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Следующая схема широко используется в мире ГИС:

Вот пример:

  <ogc:Filter xmlns:gml="http://www.opengis.net/gml">
    <ogc:And>
      <ogc:PropertyIsGreaterThan>
        <ogc:PropertyName>isoap:CreationDate</ogc:PropertyName>
        <ogc:Literal>2007-07-31</ogc:Literal>
      </ogc:PropertyIsGreaterThan>
      <ogc:Or>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>isoap:Type</ogc:PropertyName>
          <ogc:Literal>service</ogc:Literal>
        </ogc:PropertyIsEqualTo>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>isoap:Type</ogc:PropertyName>
          <ogc:Literal>application</ogc:Literal>
        </ogc:PropertyIsEqualTo>
        <ogc:PropertyIsEqualTo>
          <ogc:PropertyName>isoap:Type</ogc:PropertyName>
          <ogc:Literal>dataset</ogc:Literal>
        </ogc:PropertyIsEqualTo>
      </ogc:Or>
    </ogc:And>
  </ogc:Filter>

Это может быть обработано в реляционных базах данных, а также в ориентированных на документы базах данных или с полнотекстовой индексацией, такой как Lucene.

1 голос
/ 24 ноября 2010

Есть XQuery , который можно расширить с помощью ваших собственных функций и т. Д., Но он не полностью основан на XML (он работает с XML, но сам по себе не является XML).

...