Я бы сказал, что для XML-файла без схемы рекомендуется создать для него схему!
Отсутствие схемы не особенно приятно. Это означает, что вы не можете проверить файл каким-либо образом, кроме как определить, является ли он правильно сформированным XML или нет.
Отсутствие семантики в файле выглядит подозрительно. Потому что это будет означать, что вы не знаете, что вы должны, сделали или будете вкладывать в это. Если это так, это звучит подозрительно, как решение в поисках проблемы.
Если у вас нет схемы, потому что вы еще не знаете язык схемы, взгляните на DTD. Это очень просто. Вы можете изучить и освоить его примерно через час или два, если в вашем приложении есть утилита проверки или анализатор проверки.
Если проблема, которая мешает вам иметь схему, состоит в том, что ваши правила схемы, похоже, не соответствуют типам файлов определения схемы, которые вы рассматривали до сих пор, не бойтесь.
Хотя файлы DTD и даже файлы XSD (XML-схемы) несколько негибки, существуют и другие более гибкие типы файлов схем. Поверьте, они намного проще, чем XSD.
Посмотрите спецификацию файла схемы RNC (RELAX NG, compact). Файлы RNC очень легко читать и писать людям. Есть некоторые редакторы XML, которые понимают их. Существуют утилиты, которые будут конвертировать туда и обратно между RELAX NG форматом (RNG или RNC) и другими форматами, такими как DTD и XSD.
В прошлый раз, когда я проверял, XHTML TR включал ненормативный RNC-файл для помощи в его проверке, не говоря уже о однозначном документировании. RELAX NG обладает гибкостью, чтобы сделать это, и вы действительно можете прочитать ее, не будучи частью коллектива Borg. В этом случае Борг не является эвфемизмом Microsoft.
Если вам нужно что-то более гибкое, чем RELAX NG, взгляните на Schematron . Это очень хороший язык проверки схемы на основе правил. Это не очень сложно. Как и другие языки схемы, он существует уже давно, является зрелым и признанным стандартом.
Даже некоторые старшие инженеры в Microsoft испытывали серьезные опасения по поводу XSD. Сложность высока, оказывается, что она не может выразить некоторые не очень странные расположения данных, она очень многословна, она сочетает в себе такие проблемы, как валидация и значения по умолчанию и так далее. Что бы вы ни делали, это не очень хорошо подходит для непосредственной поддержки.
Средства отображения RDF, такие как инструменты привязки XSD, хорошо подходят для сохранения объектов, учитывая их классы в некоторых поддерживаемых языках программирования, таких как Java (например, с JAXB). Не ясно, есть ли у вас классы, которые вы хотите сохранить в первую очередь.
Существует несколько семантических веб-технологий, таких как OWL и RDF, которые являются гибкими и очень динамичными.
Один инструмент, на который вы, возможно, захотите взглянуть, - это Protege Стэнфорда. Это довольно мощный и очень гибкий. Это в основном семантическая сеть IDE и фреймворк. Последний написан на Java, как и инструмент. Однако схема семантической сети и файлы данных, которые Protege создает и редактирует, могут использоваться программами, написанными на любом языке. В таких файлах нет смещения по отношению к Java.
Кроме того, вы можете найти множество семантических веб-схем, используя Swoogle . Возможно, уже существует схема, которая подходит для любого приложения.
По сути, придумать файл схемы на одном из этих многих языков проверки схемы несложно, если вы знаете, что хотите поместить в свой файл данных XML. Если вы понятия не имеете, то вряд ли программа или человек узнают, что с ней делать, когда они ее прочитают. Если это так, XML может быть не лучшим представлением хранилища. Я не уверен, что что-нибудь будет.
Вместо этого вы можете просто захотеть делать то, что вы делаете, в универсальном, динамически типизированном языке сценариев, таком как Python или Ruby. LISP также можно использовать, если вы хотите, чтобы ваши программы могли не только иметь неограниченные форматы данных, но и иметь возможность изменять самих себя.
Другой вариант хранения данных без схемы - это язык логического программирования. Обычно они не имеют никакой схемы. Вместо этого они имеют онтологию .
Два языка программирования, с которыми я много работал, это онтологии CLIPS и Prolog. Доступны бесплатные кроссплатформенные реализации с открытым исходным кодом.
Взгляните на SWI-Prolog ; быстрый, простой и мощный. Вы можете определить факты в нем и правила, которые в основном синтезируют соответствующие факты, когда это необходимо. Вы извлекаете данные с запросами. Пролог был источником вдохновения для RDF, когда он был создан еще в 1990-х годах, насколько я помню. Оригинальная документация RDF использовалась для частых ссылок на Пролог. Если вы хотите «обнаружить», «проанализировать» или «найти» факты о фактах в вашей онтологии, Prolog - очень хороший язык для написания таких приложений. Это также удобно для анализа естественного языка.
CLIPS тоже подойдет, если вы хотите решить проблемы с фактами в вашей онтологии. Он хорошо подходит для организации, устранения неполадок и настройки приложений.
Если схемы не ваша вещь, возможно, онтологии. Если нет, то, возможно, вам следует просто использовать динамически типизированный язык сценариев и сохранять данные, хранящиеся в сложных объектах, используя карты и списки, в файлы, используя их стандартные механизмы сохранения.