Описание скрипта для импорта симуляций Описание скрипта для импорта моделей Скрипт import.pl предназначен для импорта моделей из репозитория в OpenCollege. Составные части Скрипт состоит из следующих файлов: importer.pl - главный файл, который разбирает командную строку, конфигурационный файл, запускает остальные файлы скрипта и копирует необходимые файлы в нужные директории. xml_physicon_parser.pl – разбирает xml-файл info.xml из каждой директории и выбирает из него данные согласно шаблону, заданному в конфигурационном файле. import_to_db.pl – формирует и выполняет sql запросы по заданным в конфигурационном файле шаблонам и полученным из info.xml данным. importer.cfg - тут задаются глобальные переменные, относящиеся к базе данных и копированию файлов. importer.template – даны шаблоны разбора xml-файла и составления sql-запросов для каждого типа вносимых моделей (java, screenshot, flacon, flash). К сожалению, шаблон копирования файлов сейчас не применяется. Все директивы копирования зашиты в importer.pl (функция copy_files). Аргументы командной строки importer.pl [--check|check_only|verbose] dir_name_list … Указанные директории должны содержать директории с номерами моделей. Обычно такая структура получается разархивированием полученного файла из репозитория (Репозиторий -> Export Simulations -> …) Ключ Описание --check Проверяет, есть ли записи в каталоге, ссылающиеся на одни и те же модели. Проверка ведется до внесения в базу данных новых моделей. --check_only Аналогично ключу --check проходит проверка множественных ссылок на -o одну модель. Больше никаких действий не выполняется. Аргумент dir_name_list можно опустить. --verbose Выводится информация о совершаемых действиях: создании директорий, -v копировании файлов, запросах к базе данных. Конфигурационный файл Файл importer.cfg содержит следующие настройки: Переменная Пример Ее значение значения /home/open/ww Относительно ее задаются DIR_* BASE w/simrent/ переменные. DIR_JAR jars/ В этой директории хранятся файлы javaсимуляций. DIR_FLACON flacon/ В этой директории находятся файлы симуляций на флаконе. DIR_FLASH flash/ В этой директории хранятся файлы флешевых анимаций. DIR_SCRSHOT scrshots/ В этой директории хранятся файлы 1 Описание скрипта для импорта симуляций Переменная Пример значения DIR_ICON res_icons/ JAR_PATH ../jars/ SCR_PATH ../scrshots/ ICON_PATH ../res_icons/ FLACON_BASE ../flacon/ FLASH_PATH ../flash/ DATABASE trial DBHOST localhost DBUSER taty DBAUTH “” Ее значение скриншотов. В этой директории хранятся файлы иконок. этот путь входит в SQL-запросы javaсимуляций. этот путь входит в SQL-запросы (путь к скриншотам). этот путь входит в SQL-запросы (путь к иконкам). этот путь1 входит в SQL-запросы флешевых анимаций. этот путь входит в SQL-запросы имя базы данных, куда идут SQL-запросы. где находится база данных пользователь, под которым соединяемся с БД его пароль. Структура шаблонов Шаблоны лежат в importer.template. Шаблоны позволяют указать для каждого типа моделей какие теги и аттрибуты надо извлекать из файла info.xml, какими SQL-запросами помещать найденную информацию в базу данных и какие файлы куда копировать. Комментариями являются строки, начинающиеся с #. Различные типы моделей (Java, Flacon, Flash etc.) отделяются друг от друга линией знаков равенства, внутри которой указан тип. Название типа должно СТРОГО совпадать с тем именем, который будет указан в файле info.xml в теге <simulation type=”…”>. Например: ====================== Java =================================== Все, что написано до первого разделителя типов игнорируется. Внутри типа информация подразделяется на шаблон разбора xml-файла, шаблон SQLзапросов и шаблон копирования файлов. Разделители подсекций состоят из лидирующих знаков равенства и названия подсекции (XML, SQL, FILE), например: === XML ==SQL === FILE Структура шаблона для разбора XML файла Шаблон начинается со стороки типа ==XML. Так как в некоторых типах таги с одинаковыми именами лежат внутри разных тегов и имеют различное значение (например, для Flash надо брать содержимое тега movie, который лежит внутри тега code, а не от того, который лежит внутри тега params), то вам В запросы входит переменная flacon_path, которая состоит из FLACON_BASE с указанной версией флакона. Например, FLACON_BASE=’../flacon/’, модель написана на Flacon2 (т.е. FlaconVersion=2), тогда flacon_path=’../flacon2/’ 1 2 Описание скрипта для импорта симуляций надо указать все теги, внутри которых лежит нужная информация. Пробельные символы не имеют значения. Например, <code> <movie> text </movie> <code> Запоминается содержимое тега, если между тегами находится ключевое слово text или int. В следующих версиях для ключевого слова int будет содержимое приводиться к числу, но пока никакой разницы между text и int нет. Если интересует значение аттрибута тега, то ключевое слово text указывается как значение аттрибута, например, <simulation type = “text”> Все аттрибуты тега и все теги, не указанные в шаблоне, игнорируются. Указанное содержимое тегов и значения аттрибутов запоминаются с именем аттрибута (для значения аттрибута) или тега (для содержимого тега). Для подстановки этих значений надо указать имя в квадратных скобках. Для приведенных примеров это [movie] и [type]. Структура шаблона SQL запросов Шаблон начинается со стороки типа ==SQL. Метаязык шаблона запросов к БД похож на SQL. Каждый запрос заключен в двойные кавычки. Запрос может располагаться на нескольких строках. Запросы выполняются в том порядке, в котором они указаны в шаблоне. Глобальные переменные из конфигурационного файла указываются в угловых скобках, например, <icon_path>. Переменные, полученные при разборе xml-файла или в результате выполнения SQL-запроса пишутся в квадратных скобках, например, [movie] или [resID_jar]. “UPDATE <CatalogAttrs> SET <value>=’[applet]’ WHERE <catID>=’[catalogID]’ AND <name>=’code’ “ Чтобы запомнить результат выполнения запроса как значение переменной, напишите ее имя в квадратных скобках и поставьте после нее знак ~ : “[catalogID] ~ SELECT <ID> FROM <Catalog> WHERE <resID>=’[resID_jar]’ “ Все запросы в разделе, расположенные после специального запроса “EXIT” не выполняются. Если запрос начинается с диеза, то он не выполняется. Структура шаблона копирования файлов Шаблон начинается со стороки типа ==FILE. Сначала пишется переменная из конфигурационного файла, в которой указана директория, куда будем копировать файлы. Далее после знака «<=» пишем путь к файлу. Например: DIR_ICON <= [icon] FLACON_PATH <= [movie].swf Файл берется из той же директории, что и info.xml. Следует отметить, что для Флакона надо указывать не DIR_FLACON (хотя именно эту переменную Вы определяете в конфигурационном файле, а FLACON_PATH, который получается (хитрой) конкатенацией DIR_FLACON и версии Флакона. Надеюсь, что в будущем эта структура директорий будет заменена более ясной, и подобные финты будут не нужны. 3