Ограничение длины строки в XML-схеме

Я новичок в XML и JAXB, я пытаюсь добавить поле AdditionalDataDeposit с ограничениями в мою схему XML, чтобы я мог сгенерировать POJO с помощью Maven. Когда я пытаюсь построить его в maven, появляется ошибка:

blahBlahBlahmsgfactory: Unable to parse input schema(s). Error messages should have been provided. 
org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 
'LimitedString50' to a(n) 'type definition' component.

мой код:

Под сложным типом AdditionalData:

<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT" minOccurs="0">
  <xs:annotation>
    <xs:documentation>Additional Deposit Data</xs:documentation>
  </xs:annotation>
</xs:element>

тогда:

  <xs:complexType name="AdditionalDataDEPOSIT">
    <xs:annotation>
      <xs:documentation>Additional Deposit Data</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="depositorID" type="LimitedString50"/>
      <xs:element name="depositorNationality" type="LimitedString50"/>
      <xs:element name="fundSource" type="LimitedString50"/>
      <xs:element name="fullName" type="LimitedString100"/>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="LimitedString50">
    <xs:restriction base="xs:string">
      <xs:maxLength value="50" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="LimitedString100">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100" />
    </xs:restriction>
  </xs:simpleType>

Я плохо разбираюсь в XML-схемах, но я буду благодарен за советы.

3 ответа

Решение

В сообщении об ошибке говорится, что LimitedString50 не может быть разрешена в определение типа. Это означает, что он не может найти определение этого типа. Простой тип LimitedString50 определен в том же XSD, поэтому наиболее вероятным объяснением является то, что ваша схема имеет непустое targetNamespace, но ваша ссылка на тип не указывает это пространство имен.

Я не могу это проверить, потому что вы не опубликовали весь свой XSD.

Пока я вижу, что ваша XML-схема содержит только одну ошибку: атрибут minOccurs не должен определяться для глобальных элементов. Итак, объявление элемента DEPOSIT должно выглядеть так:

<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT">
  <xs:annotation>
    <xs:documentation>Additional Deposit Data</xs:documentation>
  </xs:annotation>
</xs:element>

Объяснение minOccurs для глобальных элементов приводится, например, здесь.

<xs:complexType name="AdditionalDataDEPOSIT">
    <xs:annotation>
      <xs:documentation>Additional Deposit Data</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="depositorID" type="trmns:LimitedStringFifty"/>
      <xs:element name="depositorNationality" type="trmns:LimitedStringFifty"/>
      <xs:element name="fundSource" type="trmns:LimitedStringFifty"/>
      <xs:element name="fullName" type="trmns:LimitedStringHundred"/>
    </xs:sequence>
  </xs:complexType>
    <xs:simpleType name="LimitedStringFifty">
      <xs:restriction base="xs:string">
        <xs:maxLength value="50" />
      </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="LimitedStringHundred">
      <xs:restriction base="xs:string">
        <xs:maxLength value="100" />
      </xs:restriction>
    </xs:simpleType>

Добавление trmns: к префиксу моего типа, похоже, сработало, я не совсем уверен, почему, может быть, кто-нибудь здесь сможет объяснить. Отправка сообщений в помощь другим.

Другие вопросы по тегам