Ваш знакомый – руководитель районной библиотеки – попросил помочь с доработкой существующей библиотечной системы. К сожалению, исходных кодов самой программы не осталось, но о полном переписывании речь не идет (нет возможностей, всем в целом нравится текущий вариант, и т.д.). К счастью, выяснилось, что в качестве формата хранения, а также для обмена данными с центральным библиотечным фондом используется XML достаточно простой структуры (см. приложенный файл books.xml) Поэтому, после обсуждения, принято решение сделать ряд утилит, которые будут работать с этими XML напрямую и закрывать отдельные текущие актуальные вопросы.
Примечание! При выполнении конкретных заданий вы можете как реализовать отдельные утилиты (консольные или GUI – на ваш выбор), так и реализовать библиотеку классов, которая будет реализовывать запрошенный функционал и тесты к ней (но не реализовывать интерфейс). Обсудите с ментором и выберите устраивающий вас вариант.
Для передачи данных о поступивших в фонды книгах используется обмен XML-файлами той же структуры, что и само хранилище (см. books.xml). Библиотечная программа умеет читать эти файлы и добавлять нужную информацию в хранилище. К сожалению, если в транспортном файле нарушена структура, то загрузка завершается ошибкой, с невнятным сообщением и без какой-либо диагностики, где именно нарушена структура. Ваша задача:
-
Разработать XML Schema для транспортного файла. При этом чтобы делались такие проверки: 1 Тэг isbn – опциональный, но если присутствует, должен содержать корректный ISBN номер 2 Тэг genre содержит значения из заранее предопределенного списка (пусть это будут те жанры, которые присутствуют в books.xml) 3 Тэги publish_date и registration_date содержат даты в формате yyyy-mm-dd. 4 Атрибут id – является идентификатором, уникальным в рамках документа
-
Написать утилиту проверки, которая используя разработанную схему, проверяет входной файл и выдает места обнаружения ошибок (например, можно выдавать id тех книг, в которых найдены ошибки, или строку и позицию тэга с ошибкой, ...).
У библиотеки есть сайт, на который они хотели бы размещать анонсы поступлений. К сожалению, для полноценного наполнения сайта нет ресурсов, поэтому решено давать RSS ленту новостей, которую строить на основе файлов каталога. Ваша задача:
- Разработать xslt преобразование из формата books.xml в RSS или Atom формат. При этом: 1 В качестве даты новости использовать дату регистрации 2 Если книга имеет жанр компьютерной литературы и указан isbn, то в качестве ссылки на полную новость давать ссылку на Online-библиотек Safary Books Online в формате http://my.safaribooksonline.com//
- Разработать утилиту, которая принимает на вход файл формата books.xml и выдает новую ленту новостей
Формируем несколько HTML отчетов (особое оформление не требуется – только данные). Формирование HTML делаем с помощью XSLT. Необходимо сделать:
- Отчет называется «Текущие фонды по жанрам» и содержит: 1 Шапку (заголовок) отчета с текущей датой 2 По таблице на каждый жанр, в таблице колонки: Автор Название Дата издания Дата регистрации 3 Итог по каждой таблице (общее количество книг указанного жанра) 4 Общий итог по всей библиотеке
- Утилиту, которая принимает на вход: исходный файл с данными, файл преобразования (XSLT), файл html, куда сохранить результат.