Вам нужно решить, думаете ли вы о XML как о XML или о XML как о способе передачи Java (или другого) объекта отсюда туда.
В XML nillable разрешает конструкцию <myelement xsi:nil='true'/>
в качестве индикатора явного отсутствующего значения, такого как SQL NULL. Это семантически отличается от просто <myelement/>
. И оба совершенно ничем не отличаются. Итак, при рассмотрении XML вы должны различать четыре случая:
<!-- nothing -->
<myElement attr1='true'>some content</myElement>
<myElement/>
<myElement xsi:nil='true'/>
Если, с другой стороны, вас больше всего интересует Java - возможно, из-за того, что вы используете SOAP, вам нужно подумать о том, как карта объектов Java перемещается туда и обратно.
Для любого элемента Java, который наследуется от Object, JAXB и другим картографическим технологиям необходим способ работы с нулевыми значениями. Nillable это способ сделать это. Если вы запрещаете nillable для чего-либо, что может быть объектом, наборы инструментов будут раздражающе использовать массив, чтобы найти способ представить отсутствие.
С другой стороны, если у вас есть массив, имейте в виду, что сам массив является объектом и может быть нулевым. Таким образом, каждый инструментарий должен отличать массив с нулевым элементом от нулевого.
С другой стороны, если у вас есть примитивный тип (например, int
), nillable приведет к проблемам, поскольку нет преобразования xsi: nil в примитив.