При проектировании структуры XML иногда возникает желание использовать похожие шаблоны для нескольких типов элементов, которые появляются в одном и том же экземпляре документа.
Например, шаблон Head-Body можетчасто полезно, если вы хотите разделить данные и метаданные (данные о данных), и иногда имеет смысл использовать этот шаблон для нескольких типов элементов в документе (хотя и с разными структурами).
Когда вы используете один и тот же шаблон в нескольких типах элементов, имеет ли смысл:
A ) Сохранить имена элементов одинаковыми?Таким образом, у вас может быть несколько разных типов элементов с именем «Head», каждый из которых имеет свою структуру ... (В вашем элементе «DataSnapshot» может быть элемент «Head», а в элементе «CompiledDataSet» может быть «Head»).элемент внутри него тоже, оба элемента «Голова» имеют различную структуру.)
B ) Или имена ваших элементов должны соответствовать типам, которые определены в вашей схеме?Таким образом, элемент head в вашем элементе «DataSnapshot» может называться «DataSnapshotHead» вместо просто «Head», а ваш элемент «CompiledDataSet» может иметь элемент head «CompiledDataSetHead».
A имеет преимущество в том, что делает шаблон очевидным и делает имена короткими.Но я предполагаю, что это может сбить людей с толку, когда элементы имеют одинаковое имя, но разные структуры.Я думаю, что это может усложнить некоторые виды запросов XPath (не уверен насчет этого - я не очень много использовал XPath).
B обычно требуют более длинных имен элементов и могутсделать менее понятным, что используется тот же шаблон.Но, по крайней мере, из имен элементов будет понятно, какой у них тип.
Ниже приведен пример подхода A :
<DataSnapshot>
<Head>
<!-- meta-data that's specific to the
DataSnapshot -->
</Head>
<DataSets>
<StandardDataSet setId="abc">
<Head>
<!-- meta-data that's specific to the
StandardDataSet -->
</Head>
<Values>
<!-- List of values, specific to the
StandardDataSet in their structure -->
</Values>
</StandardDataSet>
<CompiledDataSet setId="xyz">
<Head>
<!-- meta-data that's specific to the
CompiledDataSet. Different structure
to the Head of the StandardDataSet. -->
</Head>
<Values>
<!-- List of values, specific to the
CompiledDataSet in structure.
i.e. different to those of the
StandardDataSet -->
</Values>
</CompiledDataSet>
<!-- Any number of DataSets of different types could
go here -->
</DataSets>
</DataSnapshot>
Обратите внимание, что в приведенном выше примеренесколько элементов, называемых «Head» и «Values», которые имеют разные типы.
Если используется подход B , то в приведенном выше примере будут имена элементов, такие как: DataSnapshotHead, StandardDataSetHead, StandardDataSetValues, CompiledDataSetHead, CompiledDataSetValues.XML будет более громоздким, но будет ли он яснее или проще для анализа?
Я разрабатываю общедоступный XML API, поэтому я зацикливаюсь на таких деталях.Я хочу, чтобы этот API был максимально интуитивно понятным и простым для анализа.Я охотился за лучшими практиками, связанными с этим, но мои навыки работы с Google, похоже, не подходят - я только что нашел много советов о повторном использовании типов в XML-схеме, но ничего о повторном использовании имен элементов.Поэтому я надеюсь, что некоторые из вас, кто работал с гораздо большим количеством XML, чем я, могли бы получить мудрый совет о том, какой подход лучше?