2010-08-28 2 views
0

Этот вопрос касается XML-схем и файлов.Лучший/самый переносимый способ версии файла

Предположим, что я разрабатываю настольное приложение с файловым интерфейсом, то есть пользователь сохраняет свой прогресс в файле на диске - довольно стандартный для подавляющего большинства приложений производительности и многих других. Файл в основном представляет собой XML, схема которого каким-либо образом хранится в приложении.

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

Каков наилучший способ реализации такого рода функций? Простейший метод кажется мне использовать другое пространство имен схемы для каждой ревизии и гарантировать, что по крайней мере элемент документа файла ссылается на правильное пространство имен. Проблема с этим подходом заключается в том, что, на мой взгляд, он разрушает взаимосвязь файловых структур друг с другом - то есть элемент документа файла, сохраненного в версии x, является того же типа как соответствующий элемент под ревизией y, но как насколько известно приложение, они не связаны друг с другом, если я не укажу иначе. Тем не менее, я осмелюсь сказать, что такая логика является частью причины существования пространств имен XML, поэтому я честно не уверен. Что ты говоришь, ТАК?

редактировать # 1:

Он появляется при дальнейшей проверке, что XML-схема обеспечивает «версии» атрибут изначально. Вероятно, это источник строкового свойства «Версия» для типа XmlSchema в .Net, который является моей предполагаемой платформой. Это все хорошо и хорошо, но я получаю i) мои файлы и ii) мое приложение, чтобы уважать это значение, - другое дело. Это было бы тривиально, так как kbrimington предлагает, чтобы указать атрибут «schema version» в файлах приложений. Затем я просто сопоставляю атрибут версии из загруженного xml-файла в схему, запускаю проверку и прикладываю приложение к тому, чтобы приспосабливать/вежливо ухаживать за пользователем/мужественно бороться по мере необходимости.

редактировать # 2:

В случае, если кто-то интересно, я пошел с помощью «версии» атрибут на схеме, и соответствие это пользовательский атрибут, который применяется к обертке. Обертка извлекает строку из файла ресурсов проекта, представляющего схему (там будет проверка, чтобы убедиться, что версия схемы и версия, указанные атрибутом, соответствуют). Первое, что делает main(), - это построить таблицу соответствия используемых схем, индексированных по версии, используя Reflection для изучения типов оболочки доступных версий. Это звучит как переоцениваемый способ делать что-то, но я стараюсь думать вперед и строить избыточность и гибкость, используя несколько произвольных шагов, в которые можно было бы добавить новую функциональность. Возможные улучшения включают в себя внедрение настраиваемого типа диспетчера ресурсов, чтобы обойти некоторые из описанных здесь функций Heath-Robinson.

ответ

2

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

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

Если вы можете сказать: «Там всегда будет <version> элемента здесь, независимо от схемы, которую я могу использовать, чтобы определить, какую версию схемы для использования при проверке ...», то проблема решена. Дело в том, что у вас есть возможность определить версию, независимо от того, что еще может измениться.

Смежные вопросы