XSD - разрешить тип элемента как целое ИЛИ пустое - PullRequest
17 голосов
/ 18 августа 2011

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

<xsd:element name="weight" type="xsd:integer"/>

Ответы [ 5 ]

22 голосов
/ 12 ноября 2013

Что вам нужно сделать, это назначить ограничения на один и тот же элемент, а также объединить их, как показано в следующем примере:

<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 разрешить любое целое числозначение и разрешение элемента, если он пуст.

7 голосов
/ 25 апреля 2016

Мы можем добиться этого, сделав 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 голосов
/ 18 августа 2011

Вам необходимо установить для атрибута «nillable» значение true:

<xsd:element name="weight" type="xsd:integer" nillable="true"/>

См. Учебник по схеме XML .

1 голос
/ 02 апреля 2014

Я пришел к этому ответу, ища, как получить атрибут, который может быть обнуляемым целым числом, используя схему xsd и на основе которой создаются классы JAXB. Я не нашел здесь ответа, поэтому после того, как я нашел ответ, я решил поделиться им. Следующая часть xsd будет генерировать тип int (int), который не может иметь значение null:

<xsd:attribute name="length" type="xsd:int" use="required"/>

В коде Java это приведет к:

@XmlAttribute(name = "length", required = true)
protected int length;

Если мы откажемся от использования, мы получим:

@XmlAttribute(name = "length")
protected Integer length;

Надеюсь, это кому-нибудь поможет. И даже если этот ответ может не относиться к реальному вопросу, я считаю полезным быть здесь для тех, кто попадет сюда, выполнив тот же поиск, что и я!

1 голос
/ 26 августа 2011
<?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. Также убедитесь, что элемент веса не имеет дочерних символов (пробел все равно не будет приемлемым). Если вам нужно передать некоторые символы вместо целого числа, вам нужно определить тип объединения, чтобы разрешить оба.

...