XSD - разрешить тип элемента как целое ИЛИ пустое
Мне нужно установить простой тип элемента в виде целого числа, но позволить ему также быть пустым. В этом примере отправляется сообщение об ошибке, если его пустое и пустое поле не являются целыми числами. Как я могу обойти это?
<xsd:element name="weight" type="xsd:integer"/>
Ответы
Ответ 1
Что вам нужно сделать, это назначить ограничения для одного и того же элемента плюс создать на них объединение, например, следующий пример:
<xs:element name="job_code">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base='xs:string'>
<xs:length value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base='xs:integer' />
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
Используя это ограничение, вы указываете правильность xml, чтобы разрешить любое целочисленное значение и разрешить элементу, если он пуст.
Ответ 2
Мы можем добиться этого, создав SimpleType
<xs:simpleType name="NullOrInteger">
<xs:restriction base="xs:string">
<xs:pattern value="\d*|\s{0}" />
</xs:restriction>
</xs:simpleType>
Добавьте NullOrInteger как тип, где вы хотите ограничить целое или нулевое значение.
например:
<xs:element name="null_or_int" type="NullOrInteger" />
Ответ 3
Вам нужно установить атрибут "nillable" как true:
<xsd:element name="weight" type="xsd:integer" nillable="true"/>
См. Принцип схемы XML.
Ответ 4
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<product>
<weight xsi:nil="true"/>
</product>
</products>
Попробуйте выше, должен работать; скорее всего, вы забыли добавить атрибут xsi: nil. Кроме того, убедитесь, что весовой элемент не имеет характера в виде детей (пробел все равно не будет приемлемым). Если вам нужно передать некоторые символы вместо целого числа, вам нужно определить тип объединения, чтобы разрешить оба.
Ответ 5
Я подошел к этому ответу, выполнив поиск того, как получить атрибут как нулевое целое число, используя схему xsd и на основе которого создаются классы JAXB. Я не нашел здесь ответа, поэтому после того, как я обнаружил ответ, я решил поделиться им. Следующая часть xsd будет генерировать недействительный тип int (int):
<xsd:attribute name="length" type="xsd:int" use="required"/>
В коде Java это приведет к:
@XmlAttribute(name = "length", required = true)
protected int length;
Если мы отбросим требуемое использование, мы получим:
@XmlAttribute(name = "length")
protected Integer length;
Надеюсь, это поможет кому-то. И даже если этот ответ может быть не связан с фактическим вопросом, я считаю полезным быть здесь для тех, кто будет здесь, выполняя тот же поиск, что и я!