Для чего на самом деле хорош атрибут form в схемах XML?

Последние несколько дней я совершенствовался в своих навыках работы с XML-схемами, и целый день я был занят попытками понять тонкости пространств имен по отношению к схемам. Больше всего меня поразила внешняя бесполезность form="qualified|unqualified" атрибут неглобальный <element> а также <attribute> элементы.

Мой вопрос: form атрибут на самом деле добавляет выразительность схемам XML / документам XML, или это просто делает обозначение определенных документов XML более простым / различным?

Я понимаю, что документы XML, которые должны соответствовать определенной схеме, как правило, легче написать, когда все элементы должны быть квалифицированы с пространством имен (один атрибут xmlns="xyz" в элементе документа - это все, что вам нужно), но все? Зачем кому-то вообще возиться с неквалифицированными неглобальными элементами?

1 ответ

Решение

Во-первых, по формальному вопросу: form атрибут на самом деле добавить к выразительности XSD? Я так думаю: с form Атрибут Я могу писать типы, чьи наборы допустимых экземпляров не могут (насколько я вижу) соответствовать любому типу, написанному без использования form приписывать.

Например (в схеме, которая определяет элемент верхнего уровня с именем a типа duration):

<choice maxOccurs="unbounded">
  <element form="qualified" name="a" type="integer"/> 
  <element form="unqualified" name="a" type="gYear"/> 
</choice>

Тогда о менее формальном вопросе: зачем кому-то мешать?

Краткий ответ: потому что для каждого возможного способа выбора среди квалифицированных и неквалифицированных имен для локальных элементов и атрибутов, некоторые люди думают, что это правильный способ объявить локальные элементы и / или атрибуты.

Более длинный ответ займет немного времени. Садись, принеси себе чашку кофе.

Есть две школы мысли о местных элементах; оба были представлены в рабочей группе, которая разработала XSD.

Одна школа мысли считает, что если элемент P находится в пространстве имен N, а элемент C является локальным для типа элемента N:P, то вполне естественно, что дочерний элемент должен называться N:C. В конце концов, это часть того же словаря, что и P, и определение словарного запаса - вот что такое пространство имен. Из вашего последнего вопроса, я полагаю, вы склоняетесь к такому взгляду на вещи.

Другая школа мысли полагает, что местные элементы похожи на местные атрибуты. Атрибут, локальный для (типа) элемента N:P, называется A, а не N:A - имя N: A обозначает, по определению, атрибут, глобальный для пространства имен N, а не локальный для элемента N:P. По аналогии, локальные дочерние элементы также должны использовать неквалифицированные имена, чтобы атрибуты и дочерние элементы обрабатывались аналогичным образом.

Наличие form Атрибут в элементе XSD и объявления атрибута могут указывать на возможное существование третьей школы мысли, характеризующейся желанием рассматривать выбор между квалифицированными и неквалифицированными именами как выбор дизайна, который должен быть взят индивидуально для каждого локального элемента или атрибута, и не обязательно в одном словарном указе. Что бы это ни стоило, эта третья школа мысли на самом деле, кажется, не существует. По крайней мере, я не думаю, что когда-либо встречал члена. Кажется, никто никогда не намеревался писать сложные типы вышеперечисленных видов со смесью квалифицированных и неквалифицированных местных названий. Основная функция form Атрибут не должен позволять различным локальным элементам быть квалифицированным или неквалифицированным, но должен иметь значение по умолчанию, установленное elementFormDefault а также attributeFormDefault атрибуты на включающем элементе схемы, таким образом гарантируя, что даже если авторы схемы каким-то образом застрянут с неправильными значениями для этих атрибутов, они все равно смогут получить желаемый эффект.

Я также никогда не встречал (что мне известно) ни одного члена одной из первых двух школ мысли, который мог бы вообще испытывать сочувствие к рассуждениям другой школы. То, что любой мог думать так, как думают члены другой школы мысли, всегда было неприятным сюрпризом. Приложив немного усилий, умные люди доброй воли найдут возможность принять существование другой школы мысли и даже (чуть больше усилий) принять, что члены этой школы мысли спорят добросовестно, и не просто пытаются склеить работы. Разнообразие взглядов в лучшем случае имеет антропологический интерес (посмотрите на очень странные вещи, в которые люди могут претендовать на веру, даже если в противном случае они кажутся в основном более или менее рациональными существами! Забавный старый мир, не так ли?). После нескольких месяцев тупика большинство членов рабочей группы были вынуждены признать, что просто не смогут убедить других ребят увидеть ошибку их пути.

Затем стало ясно, что почти все в рабочей группе имеют одинаковый рейтинг для трех возможных вариантов:

  1. Определите вещи так, как я считаю правильным.
  2. Определите вещи так, чтобы автор схемы сделал выбор.
  3. Определите вещи так, как другие парни считают правильным.

Всем понравился первый выбор (для подходящих значений "я"), но для разных членов РГ "то, что я считаю правильным", оказалось для обозначения разных вещей.

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

Но все ненавидели третий выбор (быть вынужденным делать то, что хотели другие парни) настолько сильно, что они были готовы пойти на компромисс, а не рисковать полным поражением.

Другие вопросы по тегам