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