Xsi nil true что означает

Журнал ВРМ World

Представление нулевых значений в схеме XML

Введение

Компонентная объектная модель для Java, известная как Java beans, имеет определенные свойства, называемые полями. Эти поля могут иметь нулевые значения, если только они не являются полями примитивного типа. При преобразовании («мэппировании») Java beans в XML эти поля становятся элементами или атрибутами. Простые элементы и атрибуты не могут иметь нулевых значений (их можно рассматривать как своего рода эквиваленты примитивным типам Java, которые также не могут иметь нулевых значений). Существует несколько способов изменить атрибуты и элементы XML таким образом, чтобы их экземпляры имели нулевое значение (или хотя бы логически были эквивалентны нулю):

В предлагаемой статье обсуждаются детали и варианты каждого из этих способов.

Элементы и атрибуты

Листинг 1. Схема AttributeOrElement

В листинге 2 представлен экземпляр схемы листинга 1.

Листинг 2. Экземпляр AttributeOrElement

Ясно видно, что поле атрибута занимает меньше места в экземпляре, чем поле элемента. Соответственно, сообщения SOAP, которые переносят документы в формате XML, содержащие атрибуты, также будут меньше, что сократит время их передачи. Таким образом, кажется, что атрибуты оказываются предпочтительнее элементов. Но те специалисты, кто уже давно работает со схемами, могли заметить, что атрибуты используются не так уж часто. Возникает вопрос: почему? Автор затрудняется назвать точную причину, но приводит несколько аргументов:

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

Нулевой атрибут

Листинг 3. Схема TypeWithNullAttribute

Листинг 4. Экземпляры TypeWithNullAttribute

Атрибут со значением:

Атрибут, переданный как нулевой:

Нулевые элементы

Существует два способа представить нулевое значение, используя элементы: с помощью атрибутов nillable=»true» или minOccurs=»0″. В листинге 5 показана схема для оператора TypeWithNullElements, содержащая по одному элементу для каждого из стилей полей, которые могут иметь нулевое значение.

Листинг 5. Схема для TypeWithNullElements

Листинг 6. Экземпляры TypeWithNullElements

Элементы со значениями:

Элементы с нулевыми значениями:

Как и необязательный атрибут, элемент с атрибутом minOccurs=»0″, имеющий нулевое значение, просто отсутствует в экземпляре XML. Это способствует уменьшению размера сообщения, в отличие от того варианта, когда элемент определяется с помощью атрибута nillable=»true». Атрибут nillableElem, даже имея нулевое значение, включает поле для значения, которое показывает, что значение этого атрибута действительно равно нулю.

Когда атрибут nillable=»true» оказывается полезен

Листинг 7. Схема для элементов массива, значение которых может быть нулевым

Листинг 8. Экземпляр XML для элементов массива, значение которых может быть нулевым

Заключение

Источник

Значения членов данных по умолчанию

Чтобы исключить член из сериализованных данных, задайте для свойства EmitDefaultValue атрибута DataMemberAttribute значение false (по умолчанию задано значение true ).

Присваивать значение EmitDefaultValue свойству false следует только при конкретной необходимости, например для обеспечения взаимодействия или для уменьшения объема данных.

Пример

Представление XML

При сериализации предыдущего примера в XML представление аналогично приведенному ниже.

Взаимодействие со свойством IsRequired

Как обсуждалось в разделе Управление версиями контракта данных, DataMemberAttribute атрибут имеет IsRequired свойство (значение по умолчанию — false ). Это свойство указывает, должен ли определенный член данных присутствовать в сериализованных данных при десериализации. Если для свойства IsRequired задано значение true (означающее, что значение должно присутствовать), а для свойства EmitDefaultValue задано значение false (указывающее, что если значение равно значению по умолчанию, то оно может отсутствовать), сериализация значений по умолчанию для этого члена данных невозможна, так как результат будет противоречивым. Если для такого члена данных задано значение по умолчанию (обычно null или ноль) и производится попытка сериализации, возникает исключение SerializationException.

Представление схемы

Фактическое значение по умолчанию, которое требуется использовать, в этой схеме отсутствует. Правильная интерпретация отсутствующего элемента зависит только от принимающей конечной точки.

Источник

Как правильно представлять нулевые элементы XML?

Я видел null элементы, представленные несколькими способами:

Элемент присутствует с xsi:nil=»true» :

Элемент присутствует, но представлен как пустой элемент (который я считаю неправильным, поскольку «пустой» и null семантически отличается):

Элемент вообще отсутствует в возвращаемой разметке :

Элемент имеет дочерний элемент (из TStamper ниже):

Есть ли правильный или канонический способ представить такое null значение? Есть ли дополнительные способы, чем приведенные выше примеры?

XML для приведенных выше примеров придуман, так что не читайте слишком подробно. 🙂

Если используется пустой тег, getElementValue () возвращает пустую строку («»). Если тег опущен, то никакого авторского тега даже нет. Это может семантически отличаться от установки значения «nil» (например, установка «Series» в значение «nil» может означать, что книга не принадлежит ни одной серии, в то время как отсутствие серии может означать, что ряд является неприменимым элементом к текущему элементу.)

Схема XML: Structures представляет механизм для оповещения о том, что элемент должен быть принят как · действительный ·, когда у него нет контента, несмотря на тип контента, который не требует или даже обязательно допускает пустой контент. Элемент может быть · действительным · без содержимого, если он имеет атрибут xsi: nil со значением true. Элемент с такой маркировкой должен быть пустым, но может содержать атрибуты, если это разрешено соответствующим комплексным типом.

Источник

Как правильно представлять нулевые элементы XML?

Элемент присутствует с xsi:nil=»true» :

Элемент присутствует, но представлен как пустой элемент (что я считаю неверным, поскольку ’empty’ и null семантически различаются):

Элемент отсутствует в возвращенной разметке :

У элемента есть дочерний элемент (из TStamper ниже):

XML для приведенных выше примеров является надуманным, поэтому не зацикливайтесь на нем. 🙂

7 ответов

Если используется пустой тег, getElementValue () возвращает пустую строку («»). Если тег опущен, то тег автора даже не присутствует. Это может быть семантически отличным от установки «nil» (например, установка «Series» на nil может означать, что книга не принадлежит ни к какой серии, а пропуск серии может означать, что серия является неприменимым элементом к текущему элементу.)

XML Schema: Structures представляет механизм для сигнализации о том, что элемент должен быть принят как · действительный ·, когда он не имеет содержимого, несмотря на тип содержимого, который не требует или даже обязательно допускает пустое содержимое. Элемент может быть · действительным · без содержимого, если он имеет атрибут xsi: nil со значением true. Обозначенный таким образом элемент должен быть пустым, но может нести атрибуты, если это разрешено соответствующим сложным типом.

Уточнение:
Если у вас есть xml-элемент book, а одним из дочерних элементов является book: series, у вас есть несколько вариантов при его заполнении:

Документация по ссылке w3

Говорит, что это рекомендуемые формы.

Атрибут, упомянутый в другом ответе, является механизмом проверки, а не представлением состояния. См. http://www.w3.org/TR/xmlschema-1/ #xsi_nil

Чтобы прояснить этот ответ: Контент

Простое исключение атрибута или элемента хорошо работает с менее формальными данными.

Если вам нужна более сложная информация, схемы GML добавляют атрибут nilReason, например: in GeoSciML:

Когда вы обмениваетесь данными, роль, для которой обычно используется XML, данные, отправленные одному получателю или для определенной цели, могут иметь скрытый контент, который будет доступен для кого-то еще, кто заплатил или использовал другую аутентификацию. Очень важно знать причину отсутствия контента.

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

Допустим, у вас есть xml-файл из вашего приложения ReportMaster версии 1.

Теперь в ReportMaster версии 2 добавлено еще несколько атрибутов, которые могут быть определены или нет.

Если вы используете представление «без тега означает нулевое значение», вы автоматически получаете обратную совместимость для чтения вашего XML-файла ReportMaster 1.

Источник

Как правильно представлять нулевые элементы XML?

Я видел null элементы представлены несколькими способами:

элемент присутствует при xsi:nil=»true» :

элемент присутствует, но представлен как пустой элемент (что я считаю неправильным, так как «пустой» и null семантически разные):

элемент вообще отсутствует в возвращаемой разметке:

элемент имеет дочерний элемент (от TStamper ниже):

есть ли правильный или канонический способ представления такого null значение? Существуют ли дополнительные способы, Помимо приведенных выше примеров?

XML для приведенных выше примеров является надуманным, поэтому не читайте слишком далеко в него. 🙂

7 ответов

xsi:nil-правильный способ представления значения, такого, что: Когда DOM уровня 2 вызов getElementValue() выдается, возвращается значение NULL. xsi: nil также используется для указания допустимого элемента без содержимого, даже если этот тип содержимого элементов обычно не допускает пустых элементов.

Если используется пустой тег, getElementValue () возвращает пустую строку («») Если тег опущен, то тег автора даже не присутствует. Это может семантически отличаться от установки ‘nil’ (Ex. Установка «серии» на ноль может означать, что книга не принадлежит ни к одной серии, в то время как исключение серии может означать, что серия является неприменимым элементом к текущему элементу.)

пояснение:
Если у вас есть xml-элемент книги и один из дочерних элементов-book: series, у вас есть несколько вариантов при его заполнении:

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

документация в ссылке w3

говорит, что это рекомендуемые формы.

атрибут, упомянутый в другом ответе, является механизмом проверки, а не представлением состояния. Пожалуйста, обратитесь к http://www.w3.org/TR/xmlschema-1/#xsi_nil

XML-Схема: структуры вводит механизм для сигнализации, что элемент должен быть принят как ·действительно· когда у него нет контента, несмотря на тип контента, который не требует или даже не обязательно разрешает пустой содержание. Элемент может быть * допустимым * без содержимого, если он имеет атрибут xsi: nil со значением true. элемент с такой меткой должен быть пусто, но может нести атрибуты, если это разрешено соответствующим сложный тип.

чтобы уточнить этот ответ: Содержание

просто опустить атрибут или элемент хорошо работает в менее формальных данных.

Если вам нужна более сложная информация, схемы GML добавляют атрибут nilReason, например: in GeoSciML:

когда вы обмениваетесь данными, роль, для которой обычно используется XML, данные, отправленные одному получателю или для определенной цели, могут иметь скрытый контент, который будет доступен кому-то другому, кто заплатил или имел другую аутентификацию. Знание причины отсутствия контента может быть очень важным.

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

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

Итак, скажем, у вас есть xml-файл из вашего приложения «ReportMaster» версии 1.

теперь в ReportMaster версии 2 добавлено еще несколько атрибутов, которые могут быть определены или не определены.

Если вы используете представление «нет тега означает null», вы получаете автоматическую обратную совместимость для чтения XML ReportMaster 1 файл.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *