Элемент schema определяет корневой элемент XML схемы.
Синтаксис элемента
Атрибуты элемента
Атрибут
Описание
id
Не обязательный. Определяет уникальный идентификатор для элемента
attributeFormDefault
Не обязательный. Определяет форму атрибутов, декларированных в целевом пространстве имен данной схемы. Может принимать значение «qualified» или «unqualified». Значение по умолчанию «unqualified». Значение «unqualified» указывает на то, что атрибуты из целевого пространства имен не требуют уточнения префиксом пространства имен. Значение «qualified» указывает на то, что атрибуты из целевого пространства имен должны уточняться префиксом пространства имен
elementFormDefault
Не обязательный. Определяет форму элементов, декларированных в целевом пространстве имен данной схемы. Может принимать значение «qualified» или «unqualified». Значение по умолчанию «unqualified». Значение «unqualified» указывает на то, что элементы из целевого пространства имен не требуют уточнения префиксом пространства имен. Значение «qualified» указывает на то, что элементы из целевого пространства имен должны уточняться префиксом пространства имен
blockDefault
Не обязательный. Определяет значение по умолчанию для атрибута block для элементов element и complexType в целевом пространстве имен. Запрещает использование сложного типа или элемента с определенным типом наследования на месте данного сложного типа или элемента. Может принимать значение #all или список из расширений/ограничений/замещений:
Не обязательный. Устанавливает значение по умолчанию атрибута final для элементов element, simpleType и complexType в целевом пространстве имен. Атрибут final запрещает расширять элементы по определенному методу. Для элементов element и complexType может принимать значение #all или список из расширений/ограничений. Для элементов simpleType сюда также добавляются списки и объединения:
что значит elementFormDefault do, и когда он должен быть использован?
так что я нашел некоторые определения для elementFormDefault значения:
поэтому из этого определения я бы подумал, что если схема имеет значение qualified, то почему вы должны префикс типа с пространством имен? И каковы сценарии, которые вы бы даже поставили на неквалифицированный в этом отношении? Я попытался погуглить, но все, что я получил, это пара страниц W3C, которые было очень трудно понять.
6 ответов:
ElementFormDefault не имеет ничего общего с пространством имен типов в схеме, речь идет о пространствах имен элементов в XML-документах, которые соответствуют схеме.
вот соответствующий раздел спецификации:
это означает, что targetNamespace, объявленное в верхней части схемы, применяется только к элементам в XML-документе, совместимом со схемой, Если либо elementFormDefault является «квалифицированным», либо элемент объявленный явно в схеме как имеющий форму= «квалифицированный».
положим ожидать «имя» элементов, которые должны быть в targetnamespace и «страницы» элементов, которые должны быть в нуль-пространство имен.
чтобы избежать необходимости помещать form= «qualified» в каждое объявление элемента, указание elementFormDefault= «qualified» означает, что targetNamespace применяется к каждому элементу, если не переопределено путем помещения form= «unqualified» в объявлении элемента.
рассмотрим следующий комплексный тип AuthorType используется author элемент
тогда следующий экземпляр XML действителен
атрибут имени авторов разрешен без указания пространства имен (не указано). Любые элементы, входящие в состав считаются локальными для complexType.
тогда экземпляр должен иметь локальные элементы квалифицированный
см. этой ссылка для более подробной информации
новый, подробный ответ и объяснение на старый, часто задаваемый вопрос.
есть много путаницы относительно того, что elementFormDefault делает, но это можно быстро прояснить с помощью короткого примера.
модернизированная версия ваш отзыв:
ключевые моменты:
казалось бы, допустимый XML
этот XML выглядит так, как будто он должен быть действительным в соответствии с приведенным выше XSD:
обратите внимание:
Недоумение Ошибка Проверки
несмотря на силу, выше XML приводит к следующей запутанной ошибке проверки:
[ошибка] попробовать.xml: 4: 23: cvc-сложный тип.2.4.стало: недопустимый контент найдено начиная с элемента ‘назначение’. Один из ‘<назначение>‘ является ожидаемый.
Примечания:
решение
важно отметить, что с elementFormDefault это относится к локально определенные элементы, обычно именованные элементы внутри блока complexType, в отличие от глобальных элементов, определенных на верхнем уровне схемы. С помощью elementFormDefault= «qualified» можно обращаться к локальным элементам в схеме из xml-документа, используя целевое пространство имен схемы в качестве пространства имен по умолчанию документа.
на практике используйте elementFormDefault= «квалифицированный», чтобы иметь возможность чтобы объявить элементы во вложенных блоках, в противном случае вам придется объявить все элементы на верхнем уровне и ссылаться на них в схеме во вложенных элементах с помощью атрибута ref, что приведет к гораздо менее компактной схеме.
elementFormDefault= «qualified» используется для управления использованием пространств имен в документах экземпляра XML (.xml-файл), а не пространства имен в самом документе схемы (.XSD-файл.)
указав elementFormDefault= «qualified», мы применяем объявление пространства имен для использования в документах, проверенных с помощью этой схемы.
Я заметил, что XMLSpy(по крайней мере, версия 2011)нуждается в targetNameSpace, определенном, если используется elementFormDefault=»qualified». В противном случае не будет проверять. А также не будет генерировать xmls с префиксами пространства имен
что значит elementFormDefault do, и когда он должен использоваться?
поэтому я нашел некоторые определения для elementFormDefault значения:
поэтому из этого определения я бы подумал, что если схема установлена в qualified, то почему вы должны префикс типа с пространством имен? И каковы сценарии, которые вы даже установили бы для неквалифицированного, если на то пошло? Я попробовал погуглить, но все, что я получил, это пару страниц W3C, которые было очень трудно понять.
6 ответов
ElementFormDefault не имеет ничего общего с пространством имен типов в схеме, речь идет о пространствах имен элементов в XML-документах, которые соответствуют схеме.
вот соответствующий раздел спецификации:
это означает, что targetNamespace, объявленный в верхней части схемы, применяется только к элементам в XML-документе, совместимом со схемой, если elementFormDefault «квалифицирован» или элемент объявлено явно в схеме как имеющее form= «qualified».
чтобы сохранить вам нужно поставить form= «qualified» на каждом объявлении элемента, заявив elementFormDefault= «qualified» означает, что targetNamespace применяется к каждому элементу, если не переопределено путем размещения form= «unqualified» в объявлении элемента.
рассмотрим следующий ComplexType AuthorType используется author элемент
тогда следующий экземпляр XML действителен
атрибут имени авторов разрешен без указания пространства имен (не указано). Любые элементы, которые являются частью считаются локальными для complexType.
тогда экземпляр должен иметь локальные элементы квалифицированный
см. этой ссылка для более подробной информации
новый, подробный ответ и объяснение на старый, часто задаваемый вопрос.
модернизированная версия ваш отзыв:
ключевые моменты:
кажущийся действительным XML
этот XML выглядит так, как будто он должен быть действительным в соответствии с вышеуказанным XSD:
обратите внимание:
Недоумение Ошибка Проверки
несмотря на силу, выше XML дает следующую ошибку запутанной проверки:
[ошибка] попробовать.XML-кода:4:23: вах-сложного-типа.2.4.a: недопустимое содержимое начиная с назначения элемента». Один из » <назначение>» ожидаемый.
Примечания:
решение
важно отметить, что elementFormDefault относится к локально определенные элементы, обычно именованные элементы внутри блока complexType, в отличие от глобальных элементов, определенных на верхнем уровне схемы. С помощью elementFormDefault= «qualified» вы можете обращаться к локальным элементам схемы из xml-документа, используя целевое пространство имен схемы в качестве пространства имен по умолчанию документа.
на практике используйте elementFormDefault= «квалифицированный», чтобы иметь возможность чтобы объявить элементы во вложенных блоках, в противном случае вам придется объявить все элементы на верхнем уровне и ссылаться на них в схеме во вложенных элементах с помощью атрибута ref, что приведет к гораздо менее компактной схеме.
этот бит в XML-схеме Primer говорит об этом:http://www.w3.org/TR/xmlschema-0/#NS
elementFormDefault= «qualified» используется для управления использованием пространств имен в документах экземпляра XML (.xml-файл), а не пространства имен в самом документе схемы (.XSD-файл.)
указав elementFormDefault= «qualified», мы применяем объявление пространства имен для использования в документах, проверенных с помощью этой схемы.
Я заметил, что XMLSpy (по крайней мере, версия 2011)нуждается в targetNameSpace, определенном, если используется elementFormDefault=»qualified». В противном случае не будет проверять. А также не будет генерировать xmls с префиксами пространства имен
What does elementFormDefault do, and when should it be used?
So I found some definitions for elementFormDefault values:
So from that definition I would think that if a schema is set to qualified then why must you prefix the type with the namespace? And what are the scenarios that you would even have one set to unqualified for that matter? I tried Googling, but all I got were a couple W3C pages that were extremely hard to understand.
6 Answers 6
ElementFormDefault has nothing to do with namespace of the types in the schema, it’s about the namespaces of the elements in XML documents which comply with the schema.
Here’s the relevent section of the spec:
What that means is that the targetNamespace you’ve declared at the top of the schema only applies to elements in the schema compliant XML document if either elementFormDefault is «qualified» or the element is declared explicitly in the schema as having form=»qualified».
will expect «name» elements to be in the targetNamespace and «page» elements to be in the null namespace.
To save you having to put form=»qualified» on every element declaration, stating elementFormDefault=»qualified» means that the targetNamespace applies to each element unless overridden by putting form=»unqualified» on the element declaration.
Consider the following ComplexType AuthorType used by author element
then following XML Instance is valid
the authors’s name attribute is allowed without specifying the namespace(unqualified). Any elements which are a part of are considered as local to complexType.
then the instance should have the local elements qualified
please refer this link for more details
New, detailed answer and explanation to an old, frequently asked question.
There’s a lot of confusion regarding what elementFormDefault does, but this can be quickly clarified with a short example.
Streamlined version of your XSD:
Key points:
Seemingly Valid XML
This XML looks like it should be valid according to the above XSD:
Notice:
Perplexing Validation Error
Despite looking valid, the above XML yields the following confusing validation error:
[Error] try.xml:4:23: cvc-complex-type.2.4.a: Invalid content was found starting with element ‘assignment’. One of ‘‘ is expected.
Notes:
Solution
Credits: Thanks to Michael Kay for helpful feedback on this answer.
В жизни каждого аналитика и программиста наступает такой день, когда он узнает о существовании шаблонов (паттернов) проектирования XML-схем и его жизнь меняется. Для меня, например, с этого знания началось постижение красоты проектирования.
Сегодня хочу поговорить о том, какие есть шаблоны проектирования XSD, о преимуществах и недостатках каждого, и почему мы для своих задач выбрали «Райский сад».
Для примера возьмем следующий XML-документ в качестве источника данных.
И посмотрим, как можно описать одну и ту же структуру XML-документа разными способами. В основе разделения на шаблоны лежит принцип определения глобальных элементов и/или типов данных внутри XSD.
Матрешка (Russian Doll)
Суть шаблона в том, что схема является зеркалом описываемого ею XML-документа: если сложные элементы содержат внутри себя другие сложные элементы, а те в свою очередь содержат простые, то и в XSD описания таких элементов будут вложены друг в друга. Название шаблон получил в честь известной во всем мире нашей куклы-матрешки, по аналогии с тем, как дочерние элементы в шаблоне инкапсулируются в родительские.
Схема, описывающая структуру нашего файла-источника с использованием шаблона «Матрешка», выглядит так:
Салями (Salami Slice)
Суть шаблона в том, что описываемый XML-документ разделяется на составные элементы, каждый из которых описывается в XSD как глобальный. Затем описанные элементы соединяются воедино.
Схема, описывающая структуру файла-источника с использованием шаблона «Салями», выглядит так:
Венецианские жалюзи (Venetian Blind)
Суть шаблона в том, что описываемый XML-документ разделяется на составные типы, каждый из которых описывается в XSD как глобальный. Затем объявляется корневой элемент, соответствующий глобальному типу, соединяющему схему воедино.
Схема, описывающая структуру файла-источника с использованием шаблона «Венецианские жалюзи», выглядит так:
Райский сад (Garden of Eden)
«Райский сад» хорош тем, что определяет каждый элемент и составной тип данных как глобальный. Это позволяет ссылаться на любой тип или элемент в пределах одного XSD или из любой другой XSD и даже из WSDL. Только так можно полностью контролировать семантику и типов и элементов.
Схема, описывающая структуру файла-источника с использованием шаблона «Райский сад», выглядит так:
Выбор шаблона
Часто при выборе шаблона проектирования приходится искать баланс между возможностью повторно использовать компоненты схемы и глубиной взаимосвязи между компонентами. На рисунке показан потенциал каждого из шаблонов в разрезе этих двух аспектов.
Те схемы, в которых хорошо поддерживается повторное использование компонентов, с другой стороны имеют сильные взаимосвязи между компонентами. При необходимости что-то поменять в такой схеме разработчик схемы может столкнуться с тем, что менять придется много связанных элементов и/или типов. Такими схемами впоследствии трудно управлять.
Нам в проекте важнее всего было повторное использование типов и элементов схемы и во вторую очередь тотальный семантический контроль имен. Выбор шаблона был очевиден – Райский сад.
Небольшое лирическое отступление. Самым интересным применением шаблонов проектирования XML-схем на моей памяти был и остается гипноз аудитории. Один наш титулованный аналитик любит брать инициативу в свои руки через рассказ на эту тему. Засекала время, через 5 минут взгляд слушателей тускнеет, и они уходят куда-то далеко в себя. На «Райском саде» сознание большинства отключается.
И в заключении хочу добавить, что миксы шаблонов тоже возможны, мы с ними встречались.