Приведу примерное описание базы, которую использую у себя. Сейчас пришло понимание, что надо несколько поменять структуру и перевести все с DTD на XML Schema. То есть, пишу то, что на сегодняшний момент планирую, хотя по большому счету от того, что есть сейчас почти не отличается.
База состоит из большого количества файлов: по одному на "крупный" тип, мелкие типы объединяю по конструкторам, и вывожу в отдельные файлы по мере роста. Еще есть файлы с описанием событий, заводов и т.д. Не уверен, что это правильный подход, но поскольку редактирую все вручную, по-другому сложно. Хотя и редактировать все вручную тоже неправильно, и с этим сейчас борюсь.)
Общий подход.
Самолеты группируются по серийными (серия-номер в серии) номерам. Соответственно, объединяются по заводам. Если идет сквозная нумерация по нескольким заводам, создается "виртуальный" завод. Также виртуальный завод создается. когда наперед неизвестно, на каком заводе был произведен самолет.
"Тип" в том смысле, по которому самолеты объединяются в файлы, объединяет самолеты сходной конструкции. Если нельзя четко различить самолеты, то они будут в одном файле. Если самолет является развитием другого, то тоже в одном файле. И, понятно дело, если общая система серийных номеров. Например, все МиГ-21, и наши, и китайские, и индийские в одном файле. Все истребители Як, которые от И-26 пошли тоже объединены. Смысл в том, что, например, если нашли разбитый Як, а точную марку не определили, то понятно, в какой файл писать об этом.
При использовании ссылок, информация дублируется текстом. О чем это я. Например, если самолет эксплуатировался Аэрофлотом, то ему ставится индекс Аэрофлота. В качестве индекса используется код ICAO - AFL. Но кроме этого пишется и текст: "ОАО "Аэрофлот - российские авиалинии". Причин тут несколько. Во-первых, более мощный контроль за отображением. Если есть текст, в таблице будет он, а если нет, то текст пойдет из базы авиакомпаний. Бывает удобно, когда под одним кодом летают разные отделения, например, или авиакомпания название поменяла, а код остался. Другое удобство - когда авиакомпании нет в базе (вообще код не ставится, только название) или эксплуатант является частным лицом (используется общий код "prvt").
Подход применяется не только для авиакомпаний, а для всего, на что идет ссылка. Таким образом реализуется в некоторой степени наследование.
Теперь собственно сама структура. Напишу только основные элементы с комментариями. Элемент может содержать свойства посредством текста, дочерних элементов и атрибутов. Каким образом это делается уточнять не буду, чтобы не загружать информацией. Уровень иерархии буду обозначать значками ">".
Общие элементы, которые много где встречаются.
имя Применяется для обозначения самолета, наименования заводов, авиакомпаний и пр. Может содержать указание на язык. Если указания на язык нет, то подразумевается, что это имя на родном языке.
описание Содержит в произвольной форме описание чего-либо: события, файла, предприятия. Если применяется к самолету, то кратко описывает то, чем самолет известен. Включает ссылку на язык, на котором написано.
источник Источник информации. Может включать ссылку в интернете, название на книгу, ссылку на источник из базы источников или ссылку на человека, от которого такая информация пришла. Вообще, очень важно хранить, откуда взята информация. А то потом приходится ломать голову, откуда пришло - действительно ли было, или, например, опечатка. Особенно важно, когда много людей могут редактировать.
Все ключевые элементы -
самолет,
производитель,
тип и т.д. включают уникальный идентификатор.
>
abaza - корневой элемент. Включает описание файла, номер версии и другую служебную информацию.
>>
производитель - завод, выпустивший самолет. Может включать
имя и
описание.
>>>
тип - тип самолета с точки зрения завода, не в том смысле, по которому самолеты группируются в файл. Разные типы определяются разными последовательностями серийных номеров. Например, в файле Ту-134 будет два типа: для гражданских и УБЛ один и для Ту-134Ш - другой, так как там своя нумерация.
>>>>
серия - серия самолета. Включает номер серии и тип серии. В "синтетические" серии со своим специальным типом собираются самолеты у которых известны только регистрация и не идентифицированные самолеты.
>>>>>
самолет. Вот наконец добрались и до самолета.) Практически все поля могут включать
дату, определяющую, когда это имело место.
Дата - это отдельный вопрос, так как четкая информация "от и до" бывает очень редко. Поэтому приходится в основном оперировать понятиями "на эту дату было" и "на эту дату не было". Но это если интересно будет, распишу.
>>>>>>
описание и
имя. И то, и другое, может быть несколько раз, из-за разных языков. А обозначение самолета может также меняться по ходу дела. Кроме того, у самолета может быть одновременно несколько обозначений. Если точное обозначение неизвестно, пишется примерное в квадратных скобках.
>>>>>>
серийный номер. Оказалось, что и их может быть несколько, как у Ан-148. Еще бывает, что самолет переделывают, и он получает новый серийный номер. Случай тяжелый. Выхожу из положения тем, что "завершаю" старый самолет и "начинаю" новый.
>>>>>>
заводской номер, Номер из формуляра. И их бывает несколько.
>>>>>> Еще бывают разные номера, вроде номера по радару, ЕЭВС и т.д.
>>>>>>
регистрация - регистрационный номер. Это может быть государственный номер или тактический. Если тактический, то пишется еще и
цвет. Если бывают разные, то пишется
место расположения. Соответственно, номеров бывает много, к тому же они очень часто меняются с течением времени.
>>>>>>
собственное имя - имя присвоенное самолету. Пишется точно, как на самолете. Если по левому борту и по правому написание разное, то разделяются значком "|".
>>>>>>
титул - надпись на самолете. Вроде как ерунда, но, во-первых, для многих представляет интерес и, во-вторых, когда самолет не идентифицирован, такая информация часто позволяет его идентифицировать.Тоже делается различие для правого и левого борта. Еще пришлось вводить указание на
размер надписи. А то смотришь на фото - надписи нет. Лезешь исправлять и видишь, что надпись эта идет как "tiny", то есть совсем крошечная. Присматриваешься - действительно есть. При необходимости указывается место расположения. А еще бывают надписи закрашенные и вообще самолеты без надписей. Это тоже важно, поэтому фиксируется.) Мелкие значки в надписях обозначаются "*", а большие - [* описание значка].
>>>>>>
цвет - раскраска самолета. Может включать
тип (белый, некрашенный, камуфляж и т.д.), ссылку на стандартную ливрею или
описание.
>>>>>>
двигатели - раздел, включающий информацию двигателях.
>>>>>>>
двигатель - содержит и информация о конкретном двигателе:
тип,
заводской номер и т.д.
>>>>>>
конструкция Этот раздел пока в разработке. Планирую ссылку на типовую конструкцию, описание, если есть отличия от типовой конструкции или типовой конструкции не существует. Также, наверное, стоит включить описание дополнительного оборудования.
>>>>>>
сейчас - информация о текущем состоянии.
Местоположение,
статус (летает, испытывается, уничтожен, порезан и т.д,) и
дату. Оказалось, что и этих полей может быть несколько. Во-первых, есть разная по значимости информация. Например, самолет летал, потом его не видели, а после обнаружили стоящим в непонятном состоянии. То есть есть четкая дата, когда он эксплуатировался и дата, когда он еще в какой-то степени живой. Обе эти даты представляют ценность. Другой вариант. Самолет порезали. Но его кабина используется как тренажер. Опять две даты выходит.
>>>>>>
собственник - это понятно. Наименование или ФИО.
>>>>>>
оператор Указывается
код оператора,
дата и
место.
Код оператора может быть "none", что означает, что самолет не эксплуатируется. Тогда в качестве
места берется место стоянки, а в
описании пишется что происходит (если известно). Если самолет эксплуатируется, то
место - аэропорт базирования.
>>>>>>
событие - включает
дату,
место,
тип события,
описание и
источник информации.
Тип – вариант из списка: завершение строительства, первый полет, обычный полет, авария, утилизация и т.д. Если события в списке нет, то
тип не указывается. Фотография тоже идет как событие с
типом "spot". В этом случае в
источнике информации приводится ссылка(и) на фотографию и или страницу с фотографиями.
Событие может включать и другое
событие, если одно было во время другого. Например, самолет участвовал в МАКСе. В это время было сделано несколько фотографий. По большому счету, можно было бы вообще сделать одни
события, а все остальное выводит через них. Но это потребовало бы очень продвинутой обработки.
>>>>>>
история - развернутое описание биографии самолета. Внутри нее идет форматированный по правилам HTML текст.
>>>>>>
источник информации - ссылки по общей информации о самолете.
>>>>>>
комментарий – дополнительная информация, которую отображать не стоит, но и терять жалко. Например, чьи-то предположения. Да, и в таком поле возникла необходимость.)
Как-то так получилось. Конечно, всего много (четыре с лишним страниц Ворда
), но и запросы у народа бывают самые разные. Одному интересно одно, другому – другое. По большому счету ничего особо сложного тут и нет. Надо только сделать правильную форму для внесения изменений. Точнее несколько - простую и сложную.