Какая структура XML имеет больше смысла?
Вопрос
Не вдаваясь в подробности, мы хотим использовать XML в качестве метаданных для описания ограничений на свойства (это сокращенный пример, и XSD не поддерживает предложенную нами сложную модель), рассматриваются два варианта, какая из следующих структур XML имеет больший смысл?
Вариант 1)
<?xml version="1.0" encoding="us-ascii"?>
<Properties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Property type="string">
<name>quanitity</name>
<contraints>
<contraint type="isRequired">
<value>true</value>
</contraint>
<contraint type="regex">
<value>^[0-9]$</value>
</contraint>
<contraint type="regex">
<value>^[a-zA-Z]$</value>
</contraint>
</contraints>
</Property>
</Properties>
Вариант 2)
<?xml version="1.0" encoding="us-ascii"?>
<Properties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Property type="string">
<name>quantity</name>
<IsRequired>true</IsRequired>
<Regex>^[0-9]$</Regex>
<Regex>^[a-zA-Z]$</Regex>
</Property>
</Properties>
Решение
Я бы, вероятно, выбрал вариант № 2, поскольку задание XML лучше описывает данные (что, в конце концов, и должен делать XML), и поэтому его легче читать и он менее подробный.Вариант № 1 немного близок к тому, чтобы иметь <name>
и <value>
теги на мой вкус.
Другие советы
Для большей гибкости я бы выбрал вариант № 1.Это позволит вам добавлять множество различных типов ограничений и пользовательских правил.
Это зависит от того, как вы хотите проанализировать / обработать XML и хотите ли вы иметь возможность его проверить.
С точки зрения проверки (если вы рассматриваете автоматическую проверку с помощью XSD во время компиляции) Вариант 2 является лучшим выбором, поскольку содержимое тегов будет иметь определенный тип (например, регулярное выражение), в то время как <value>
не удалось проверить правильность содержимого тега.
Кроме того, я бы, вероятно, выбрал вариант 2, касающийся синтаксического анализа и обработки, если вы используете анализатор SAX, поскольку вы могли бы переключать состояния на основе тегов.
Лично я бы выбрал первый вариант, я подозреваю, что было бы проще написать код для синтаксического анализа и выполнить проверку ошибок.К тому же это имеет больше смысла семантически для моего мозга.
Тем не менее, я думаю, вы обнаружите, что это "личный выбор", подойдет и то, и другое.