Ограничение длины строки в схеме XML - PullRequest
0 голосов
/ 18 февраля 2020

Я новичок в 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 ]

1 голос
/ 18 февраля 2020

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

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

1 голос
/ 18 февраля 2020

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

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

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

0 голосов
/ 18 февраля 2020
<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: мне кажется, что префикс моего типа работает, я не совсем уверен, почему, может быть, кто-то здесь может объяснить. Публикация в помощь другим.

...