flammberg (flammberg) wrote,
flammberg
flammberg

Categories:

Очень специальная тема...

...Вообще-то, ей место в каком-нибудь специализированном форуме. Но как показывает практика моего общения с коллегами по бранчу (веб-программирование), чукча - не писатель, чукча - читатель. А на русскоязычных ресурсах просто начнется срач.

Особенно надеюсь на участие в теме френдов mr_bison и yurakolotov, как, так сказать, профильных специалистов.

...В общем, я хочу реализовать концепцию под условным названием JPATH - рекурсивный поиск по узлам дерева в формате JSon. Синтаксис каковой концепции, собственно, и представлен к обсуждению.

Уровень 1. Простейший поиск.

Описание инструкции простейшего поиска состоит из следующих частей...

1. Указатель глубины и направления. Опционально. Имеются следующие виды указателей...

= - поиск только в текущем узле.
> - поиск только в прямых потомках(детях) текущего узла.
=> - поиск в текущем узле и его детях.
>> - поиск во всех потомках текущего узла.
=>> - поиск в текущем узле и всех его потомках.
< - поиск только в прямом предке(родителе) данного узла.
=< - поиск в текущем узле и его родителе.
<< - поиск во всех предках текущего узла.
=<< - поиск в текущем узле и всех его предках.

По умолчанию данная опция считается равной >>, то есть, поиску по всем потомкам текущего узла.

2. Собственно, описание разыскиваемого узла. Может выглядеть следующим образом...

key|* - поиск узла с заданным именем (здесь и далее, звездочка - любой узел).
key|*=value - поиск узла с заданными именем и заданным скалярным значением(здесь и далее, возможно задание колбэка).
key|*={min, max}|[min, max]|[eq]|{notEq} - поиск узла со скалярным значением в заданных пределах .
key|*{min, max}|[min, max]|[eq]|{notEq} - поиск узла с количеством детей в заданных пределах.
key|*(scope|Array|Object|Function|Scalar|String|Number) - поиск узла заданного типа.
key|*(scope|Array|Object|Function|Scalar|String|Number)=value - поиск узла заданного типа с заданным значением.

3. Характеристики узлов, связанных с разыскиваемым.

. - прямые потомки данного узла.
.. - потомки данного узла.
: - прямой предок данного узла.
:: - предки данного узла.
+ - сиблинг данного узла, стоящий непосредственно перед ним.
~ - любой сиблинг данного узла.

Таким образом, простейшая инструкция JPATH может выглядеть как...

product::products.name=function(value){return value.match(/^specific/)} - все узлы с именем "продукт", имеющие предков по имени "продукты", у которых имеются подузлы "имя", начинающиеся с подстроки "специфический".

Уровень 2. Пайпс.

На этом уровне происходит поиск по следующей инструкции, исходя из результатов поиска предыдущей. Символом передачи является прямой слэш(/). Например...

*.tag=div/=*.class=container - среди всех узлов, имеющих прямого потомка "тэг" со значением "див", отбираются узлы, имеющие прямого потомка с именем "класс" и значением "контейнер".

Уровень 3. Операции со множествами найденных узлов. Имеются следующие операции с равным приоритетом...

, - объединение.
; - пересечение.
! - вычитание.

Например...

customer.city=Düsseldorf,customer.land={Germany} - поиск всех клиентов, живущих в Дюссельдорфе или не живущих в Германии.

Все спецсимволы, встречающиеся в именах ключей и в значениях, экранируются бэк-слэшем.

UPD Все же, полезно бывает изложить свои мысли в письменной форме.

Я тут подумал... Формат задания узла должен быть примерно таким...

key=value
key!=value
...
key=callback(value, key, node)

То есть, тривиальные логические операторы плюс коллбэк, возвращающий булево значение, для нетривиальных случаев, типа свойств нода и т. д...

Вот, собственно... Критика, предложения, вот это все...)) люто приветствуются.
Tags: личное, наука
Subscribe

  • Для полного раскрытия темы...

    ...а именно темы песни Семена Слепакова "Перед посольством Бразилии". Продолжение... Бегают детские банды В нищих и грязных фавелах. Палят на…

  • Брат по огню

    Туманные горы Мне стали как дом. Но забуду их скоро И вспомню с трудом. Вернувшись в долину, Обнявши жену... Прикрой мою спину, Мой брат по огню.…

  • Номенклатура

    Из арсеналов покойного Кощея Ивану досталось многое. Меч-самотык, нож-саморез, лук-самострел, топор-саморуб, цеп-самобой... Судя по всему, покойник…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 2 comments