• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

DXL: общая тема

  • Автор темы alik86
  • Дата начала
A

alik86

Предыстория:
Я так часто натыкался на этом форуме на выражения типа «ДХЛ тебе в помощь…» и т.п., что не выдержал и решил таки ознакомиться с данной технологией. ;)
Так вот:
Господа, не были бы вы столь любезны «ткнуть меня носом» в полезные ресурсы по DXL?
Интересует всё, начиная с теории (желательно на русском) и заканчивая примерами практической реализации (желательно с описанием)...
Поделитесь кто что видел, поделитесь кто что знает.
Раздел хелпа «XML for Domino» не предлагать! ;)
Заранее благодарен!
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
странный запрос...
звучит как - "научите меня водить ВАЗ 21111" ;)
нужно не ДХЛ учить, а ХМЛ - как технологию (т.е. со ср-вами работы и подходами к обработке)
 
A

alik86

To lmike
Да в том-то и дело, что вроде как «где газ, тормоз, сцепление, коробка передач находятся, уже изучил, уже даже знаю, как завестись, тронуться и ехать, но вот каково оно ехать именно на ВАЗе 21111, как там у него отрегулировано сцепление, как именно расположены передачи и т.п. хотелось бы узнать и попробовать». ;)
P.S. Т.е. интересует именно DXL.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
дык дело в том, что изучение сводится к просмотру ДТД, и готовых выгрузок
как и на авто - только поездив, сам, на конкретной модели преобретаешь специфичный опыт...
 
A

alik86

БИНГО!!! Вот меня и интересуют среди всего прочего "примеры практической реализации". Т.е. хотелось бы посмотреть конкретные примеры, начиная постановки "хочу/надо сделать то-то и то-то" и заканчивая "а вот я/он/они сделали это, использовав DXL вот так:" и код этого "вот так".
P.S. Ща доизучаю хелп + нарыл че-то на OpenNTF -- лед тронулся, господа присяжные заседатели...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
делал тупо подстановку файла в РТ и иконки...
делал выгрузку LAX, VTD для файлов
игрался с конвертацией РТ в UJAC (забросил - UJAC не развивается и не имеет границ для параграфа)
 
N

nvyush

alik86
На затравку — определение наличия картинки в рт-поле. РТ-нафигатор их в упор не видит.
 
T

turumbay

P.S. Т.е. интересует именно DXL.
имхо, dxl применяеца в двух случаях:
1. нужно достать данные из документа( вида , базы , короче - лотусового объекта ), которые невозможно( сложно ) получить через стандартный апи( @, LS ). Пример задачи - получение скриптом файла из file resourses.
2. и наоборот - хочеца впихнуть данные в объект, но нету штатного апи для впихивания. Пример задачи - убрать в бэкенде дурацкую зеленую рамку для ссылок в rt поле
В обоих случаях приходица приходица действовать эвристическим путем. ( Можно конечна выкурить dtd и найти решение эмпирически - но это не наш путь )
1. экспортируем документ в dxl, открываем его текстовым редактором и вдумчиво курим увиденное. Найти нужные данные - обычно не проблема. Поняв, где оно(искомые данные) живет - пишем выдирающий его скрипт. Путей выдираения - множество: strleft-rigth, xslt, разбор dom , реализация sax. Для случая file resource - получаем ресурс через notecollection, выгружаем в dxl, выдираем содержимое <filedata> , декодируем base64, финиш.
2. впихивание данных чуть сложнее. нужно фактически иметь два документа: исходный и целевой. Исходный обычно есть, а целевой часто можно собрать ручками в ui. Далее, играем в "найди 10 отличий" и садимся писать скрипт, преобразующий исходный документ в целевой...
При работе с элементами дизайна - все то же самое, плюс надо не забывать их подписывать после импорта.
В любом случае - чтоб набить руку - необходимо повыгружать различные объекты и посмотреть "что у ней внутре"
Примеры:
проверка наличия ровно одной картинки в rt-поле.

импорт элементов дизайна с подписыванием
 
T

turumbay

В догонку: если на форме расположен обычный текст вперемешку с pass-thru html - дизайнер часто вставляет ненужные параграфы перед html содержимым.
переодически натыкаюсь на эти грабли, особенно часто вылезают при отрисовке на форме html-таблиц - перед таблицей добавляется пустой параграф и нет возможности его убрать. Решение - убрать лишний <par>, выгрузив форму в dxl.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
моё практическое применение DXL :)
Анализатор -
 
A

alik86

Итак, если никто не против, продолжим, господа… :rolleyes:
Захотелось мне реализовать такой примерчик:
Форма с двумя rt полями RTField1 и RTField2 и кнопкой. В поле RTField1 вставлена картинка (допустим 100х100рх). По нажатию на кнопку надо «впулить» эту же картинку, но уже уменьшенную (допустим до 50х50рх) в поле RTField2.

Как я понимаю, теоретически решение выглядит как-то так:
Экспортирую RTField1, подменяю picture width="100px" height="100px" на picture width="50px" height="50px" (может еще и item name="RTField1" на "RTField2" – в общем хз ) и результат импортирую в RTField2.
(сразу же смутило то, что в NotesDXLImporter в Possible output objects значится лишь NotesDatabase)
Но как?! Как это реализовать и реализуемо ли это вообще через DXL?
Если да, то подкиньте пожалуйста приблизительный код.

P.S. ToxaRat, Ваша ссылка нерабочая.
 
T

turumbay

Как я понимаю, теоретически решение выглядит как-то так:
Экспортирую RTField1, подменяю picture width="100px" height="100px" на picture width="50px" height="50px" (может еще и item name="RTField1" на "RTField2" – в общем хз ) и результат импортирую в RTField2.
(сразу же смутило то, что в NotesDXLImporter в Possible output objects значится лишь NotesDatabase)
Но как?! Как это реализовать и реализуемо ли это вообще через DXL?
Кнопка на форме наверно не очень правильно. Не надо наступать на все грабли одновременно. Опытный граблепроходчик знает, что на грабли необходимо наступать последовательно. И даже умное слово для этого процесса выдумали: декомпозиция.
Пусть будет DXL отдельно, а UI отдельно. Сначала разберитесь с экспортом-импортом в бэкенде, потом подключайте UI. Так что для начала кнопку рекомендую сделать во вьюхе( или вообще - отдельного агента )
По задаче: все правильно рассуждаете.
1. выгружаем документ в xml.
2. преобразуем файл( поток, если не хочеца выгружать на диск) к нужному нам виду
3. импортируем полученный файл(stream) обратно в NotesDatabase с параметром
notesDXLImporter.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE ' (5)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
alik86
выгружать док лучше в stream а потом вам и реплейса хватит
 
A

alik86

C импортом/экспортом вроде разобрался.
2. преобразуем файл( поток, если не хочеца выгружать на диск) к нужному нам виду
А эти преобразования вообще делаются в огороде NotesDOMParser/NotesSAXParser али нет?

Экспортнул я документ (в нем есть поле Subject = "тема1") в D:\filename.xml:
Код:
<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE document (View Source for full doctype...)> 
<document xmlns=...>
..............
<item name="Subject" sign="false" seal="false" sealed="false" authors="false" names="false" readers="false" placeholder="false">
<text>тема1</text> 
</item>
................
</document>
Теперь хочу подменить это поле на "тема2".
Мои действия?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
читайте pipelines в хэлпе
кусок:
Код:
Sub Initialize
Dim session As NotesSession
Dim db As NotesDatabase
Dim nc As NotesNoteCollection
Dim exporter As NotesDXLExporter
Dim importer As NotesDXLImporter


Set session = New NotesSession
Set db = session.CurrentDatabase
Set nc = db.CreateNoteCollection(False)
nc.SelectDocuments = True
Call nc.BuildCollection

REM Set up importer to receive DXL piped from exporter
REM and to re-import the documents back into the 
REM current database as copies.
Set exporter = session.CreateDXLExporter(nc)
'наша вставка, styleSheet получаем где-то ещё;)
Set notesXSLTransformer = notesSession.CreateXSLTransformer(exporter , styleSheet)
'вставка - завершена
Set importer = session.CreateDXLImporter(notesXSLTransformer, db)
exporter.Process
End Sub
ежели в цепочку вставить XSLT - получим желаемое
 
A

alik86

:) Т.е. преобразования делаются в огороде NotesXSLTransformer и NotesDOMParser/NotesSAXParser тут вообще нипричем?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
можно и ими - тока зачем (для вашего случая)
Set notesDXLImporter = notesSession.CreateDXLImporter( [ input ] , [ output ] )
Parameters
input
Optional. A string or an object of the following type:
NotesDOMParser (pipelines to a NotesDOMParser object)
NotesDXLExporter (pipelines the output from the NotesDXLExporter object)
NotesRichTextItem
NotesSAXParser (pipelines to a NotesSAXParser object)
NotesStream
NotesXSLTransformer (pipelines from the NotesXSLTransformer object)
See SetInput in the NotesXMLProcessor class for additional information.
 
A

alik86

можно и ими - тока зачем (для вашего случая)
Чтобы понять суть.
Говорю же, с импортом/экспортом вроде разобрался, теперь пытаюсь разобраться с NotesDOMParser, но пока мне поддалось лишь получить/проверить ноды да их атрибуты, а вот тайное знание как преобразовать dxl (частный случай - подменить значение элемента), да еще и налету, пока мне не поддается... :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!