Я видел null
элементы, представленные несколькими способами:
Элемент присутствует с xsi:nil="true"
:
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
Элемент присутствует, но представлен как пустой элемент (который я считаю неправильным, поскольку «пустой» и null
семантически отличается):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
Элемент вообще отсутствует в возвращаемой разметке :
<book>
<title>Beowulf</title>
</book>
Элемент имеет <null/>
дочерний элемент (из TStamper ниже):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
Есть ли правильный или канонический способ представить такое null
значение? Есть ли дополнительные способы, чем приведенные выше примеры?
XML для приведенных выше примеров придуман, так что не читайте слишком подробно. :)
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
. Обратите внимание на отсутствующий http: //. Это важно, потому что строка пространства имен на самом деле является строкой для парсера xml, а не URI.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
. Примечание "www." См. W3.org/TR/xmlschema-1/#no-xsixsi:
префикс должен быть объявлен. Анализатор XML с поддержкой пространства имен отклонит ваш XML-документ, если вы попытаетесь использоватьxsi:
префикс, не объявив его. Соответствующей спецификацией здесь является w3.org/TR/xml-names/#nsc-NSDeclared («Ограничение пространства имен: объявлен префикс»), в котором говорится, что единственными предопределенными префиксами являютсяxml:
иxmlns:
. Схема XML построена на основе спецификации пространств имен XML, но не добавляет к ней никаких дополнительных предопределенных префиксов, поскольку это фактически нарушает спецификацию пространств имен XML.На этот вопрос нет канонического ответа, поскольку у XML принципиально нет нулевой концепции. Но я предполагаю, что вы хотите сопоставление Xml / Object (поскольку графы объектов имеют нулевые значения); так что ответ для вас "все, что использует ваш инструмент". Если вы пишете обработку, это означает, что вы предпочитаете. Для инструментов, которые используют XML-схему,
xsi:nil
это путь. Для большинства картографов пропуск соответствующего элемента / атрибута является способом сделать это.источник
Это зависит от того, как вы проверяете ваш XML. Если вы используете проверку XML-схемы, правильный способ представления
null
значений - с помощьюxsi:nil
атрибута.[ Источник ]
источник
Документация в ссылке w3
http://www.w3.org/TR/REC-xml/#sec-starttags
говорит, что это рекомендуемые формы.
Атрибут, упомянутый в другом ответе, является механизмом проверки, а не представлением состояния. Пожалуйста, обратитесь к http://www.w3.org/TR/xmlschema-1/#xsi_nil
Чтобы уточнить этот ответ: Содержание
источник
Вы используете,
xsi:nil
когда ваша семантика схемы указывает, что элемент имеет значение по умолчанию и что значение по умолчанию должно использоваться, если элемент отсутствует. Я должен предположить, что есть умные люди, для которых предыдущее предложение не является самоочевидной ужасной идеей, но для меня это звучит как девять видов зла. Каждый формат XML, с которым я когда-либо работал, представляет нулевые значения, пропуская элемент. (Или атрибут, и удачи, отмечающего атрибутxsi:nil
.)источник
date
элемента не очень помогает, поскольку приложение не будет знать, где на титульном листе вы хотите дата появления. (Если опущенный элемент имеет только одно возможное местоположение, это не проблема; в реальных словарях документов почти все элементы имеют много возможных местоположений.)Простое пропускание атрибута или элемента хорошо работает в менее формальных данных.
Если вам нужна более сложная информация, схемы GML добавляют атрибут nilReason, например: в GeoSciML :
xsi:nil
со значением «истина» используется, чтобы указать, что никакое значение не доступноnilReason
может использоваться для записи дополнительной информации о пропущенных значениях; это может быть одна из стандартных причин GML (missing, inapplicable, withheld, unknown
), или текст с добавлениемother:
или URI-ссылка на более подробное объяснение.Когда вы обмениваетесь данными, роль, для которой обычно используется XML, данные, отправляемые одному получателю или для определенной цели, могут скрывать содержимое, которое было бы доступно кому-то другому, кто заплатил или имел другую аутентификацию. Знание причины пропажи контента может быть очень важным.
Ученые также обеспокоены тем, почему информация отсутствует. Например, если он был удален по соображениям качества, они могут захотеть увидеть исходные неверные данные.
источник
Во многих случаях цель нулевого значения состоит в том, чтобы служить для значения данных, которого не было в предыдущей версии вашего приложения.
Допустим, у вас есть XML-файл из приложения «ReportMaster» версии 1.
Теперь в ReportMaster версии 2 добавлено еще несколько атрибутов, которые могут быть определены или не определены.
Если вы используете представление «no tag означает null», вы получаете автоматическую обратную совместимость для чтения вашего XML-файла ReportMaster 1.
источник