Я не понимаю, почему порядок элементов важен, но не имеет значения для атрибутов.
Может ли кто-нибудь обосновать причину?
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 }
}
Обратите внимание, что это ограничение не относится к текстовому шаблону.