Любая хорошая причина для XML шаблон "порядок элементов имеет значение" правило? - PullRequest
0 голосов
/ 03 июня 2009

Я не понимаю, почему порядок элементов важен, но не имеет значения для атрибутов.

Может ли кто-нибудь обосновать причину?

element addressBook {
  element card {
    attribute name { text },
    attribute email { text }
  }*
}

В XML порядок атрибутов традиционно незначителен. RELAX NG следует этой традиции. Вышеуказанный шаблон будет соответствовать обоим

<card name="John Smith" email="js@example.com"/>

и

<card email="js@example.com" name="John Smith"/>

Напротив, порядок элементов является значительным. Узор

element card {
  element name { text },
  element email { text }
}

не будет соответствовать

<card><email>js@example.com</email><name>John Smith</name></card>

А как насчет этого:

Если дочерние элементы элемента или атрибута соответствуют шаблону типа данных, то полное содержимое элемента или атрибута должно соответствовать этому шаблону типа данных. Не разрешается иметь шаблон, который позволяет части содержимого соответствовать шаблону типа данных, а другой части - другому шаблону. Например, следующий шаблон недопустим:

element bad {
  xsd:int,
  element note { text }
}

Тем не менее, это было бы хорошо:

element ok {
  xsd:int,
  attribute note { text }
}

Обратите внимание, что это ограничение не относится к текстовому шаблону.

Ответы [ 3 ]

7 голосов
/ 03 июня 2009

Я подозреваю, что это потому, что имена атрибутов должны быть уникальными в элементе и могут быть устранены неоднозначность независимо от порядка, в то время как содержащиеся элементы не должны быть уникальными. Единственный способ отличить идентичные элементы - это их порядок. Это важно, когда порядок значительный. E.g.:

<li>Put on underwear</li>
<li>Put on pants.</li>

Семантически отличается от

<li>Put on pants.</li>
<li>Put on underwear</li>
6 голосов
/ 03 июня 2009

Заказ часто очень важен. Представьте себе, например, если абзацы XHTML были случайным образом переупорядочены. Однако атрибуты, естественно, представляют собой «пакет свойств» - набор значений, а не последовательность. Вот почему вы не можете повторять атрибуты с объявлением элемента, но вы можете повторять элементы с тем же именем.

Это только часть того, как разработан XML. Свойства и элементы различаются во многих отношениях, а не только упорядочение. Иногда имеет смысл рассматривать элементы как независимые от порядка, но то, что это означает, будет зависеть от конкретной ситуации. Однако было бы неправильно рассматривать одну ситуацию, в которой порядок не имеет значения, как полное оправдание того, что он никогда не имеет значения.

3 голосов
/ 03 июня 2009

Поскольку элементы с одинаковым именем могут повторяться, например,

<List>
    <Item>a</Item>
    <Item>b</Item>
    <Item>c</Item>
</List>

В то время как атрибуты не могут, например,

<List Item="a" Item="b" Item="c" /> <!-- illegal -->

Это означает, что элементы полезны для списков вещей, а атрибуты - нет. Поскольку списки часто позиционированы, имеет смысл выводить позицию из порядка в XML, что не так запутанно, как что-то вроде следующего (что потребует специальных знаний о том, как указывается позиция или дополнительных зарезервированных слов XML, используется для этого, ни один из которых не является привлекательным вариантом).

<List>
    <Item Position="2">a</Item>
    <Item Position="1">b</Item>
    <Item Position="3">c</Item>
</List>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...