Самое правильное решение - вынести все контакты в отдельный XML документ. А что же остаётся в основном документе? Как минимум ссылка. Причём эта ссылка должна быть уникальна в глобальном смысле. Конечно же есть решение с xlink, когда мы выделяем отдельную "карту ссылок", на которой связываем все наши XML документы. Но совсем не ясно, где размещать такою "карту". Ведь она должна быть доступна, хотя бы для того, чтобы нормально отобразить информацию из документа. Причём последовательность действий должна быть следующей:
- Находим "карту ссылок";
- Находим соответствующий объект и его новый идентификатор;
- Находим и загружаем внешний документ;
- Находим нужный нам объект и читаем его атрибуты.
Причём все это нужно проделать, хотя бы чтобы отобразить имя контакта, например в составе актёров при отображении информации о фильме. Ещё надо учесть, что собирать имя не так-то просто. Ведь во внешнем файле хранятся отдельно имя и фамилия. И собирать их нужно в зависимости от языка: на русском фамилия идёт первой, а на английском - имя.
Вот и появилась у меня идея, хранить некое подобие "карты ссылок" в самом документе. А информацию о связывании назовём прокси. Конечно же помещать туда расположение внешнего документа неправильно. Зато можно дополнить прокси дополнительной атрибутикой. В прокси актёров, к примеру, можно сразу записать их полное имя и использовать именно его для отображения, избежав тем самым лишней загрузки других документов.
Структуру прокси можно разделить на две части, импорт внешней информации и экспорт внутренней. Экспорт должен лишь сообщить миру полный и уникальный идентификатор. А вот импорт уже зависит от документа.
Структура экспорта - список ExportList:
- Элементы Prefix определяют правила экспорта идентификаторов, выбирается первый подходящий; атрибуты:
- Local - префикс локальных идентификаторов, который будем убирать; по умолчанию это все локальные идентификаторы;
- External - префикс внешних идентификаторов, который будем приписывать к локальным.
- Элемент Export заводится на каждый локальный экспортируемый объект и ссылаются на него; его состав:
- Атрибут Name ссылается на один или несколько локальных объектов, в случае, если мы хотим экспортировать группой;
- Элементы Label определяют внешнее название объекта; особенно актуально для группы.
Структура импорта может быть следующей:
- Элементы Prefix (в том же пространстве имён, что и экспортные) определяют правила импорта идентификаторов, выбирается первый подходящий; атрибуты:
- Local - префикс локальных идентификаторов, который будем убирать; по умолчанию это все локальные идентификаторы;
- External - префикс внешних идентификаторов, который будем приписывать к локальным, чтобы получить внешний идентификатор.
- Далее идут элементы с суммарной информацией, полезной для данного документа; данные элементы должны лишь иметь идентификатор, чтобы на них можно было сослаться в рамках документа.
В остальных схемах достаточно лишь разрешить включать данное пространство имён (Proxy.xsd) и составить прокси-объекты для импорта.
Комментариев нет:
Отправить комментарий