限制 XML 模式中的字符串长度
Restricting string length in XML Schema
我是 XML 和 JAXB 的新手,我正在尝试将具有限制的 AdditionalDataDeposit 字段添加到我的 XML 模式中,以便我可以使用 Maven 生成 POJO。当我尝试在 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 架构,但不胜感激。
到目前为止,我看到您的 XML 架构只有一个错误:不应为全局元素定义属性 "minOccurs"。所以 DEPOSIT 元素的声明应该是这样的:
<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT">
<xs:annotation>
<xs:documentation>Additional Deposit Data</xs:documentation>
</xs:annotation>
</xs:element>
给出了关于全局元素的 minOccurs 的解释,例如here.
错误消息说 LimitedString50 无法解析为类型定义。这意味着它找不到该类型定义。简单类型 'LimitedString50' 在同一个 XSD 中定义,因此最可能的解释是您的模式具有非空 targetNamespace 但您的类型引用未指定该名称空间。
我无法验证这一点,因为您还没有发布整个 XSD。
<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: 添加到我的类型的前缀似乎有效,我不完全确定为什么,也许这里有人可以解释。发帖帮助他人。
我是 XML 和 JAXB 的新手,我正在尝试将具有限制的 AdditionalDataDeposit 字段添加到我的 XML 模式中,以便我可以使用 Maven 生成 POJO。当我尝试在 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 架构,但不胜感激。
到目前为止,我看到您的 XML 架构只有一个错误:不应为全局元素定义属性 "minOccurs"。所以 DEPOSIT 元素的声明应该是这样的:
<xs:element name="DEPOSIT" type="trmns:AdditionalDataDEPOSIT">
<xs:annotation>
<xs:documentation>Additional Deposit Data</xs:documentation>
</xs:annotation>
</xs:element>
给出了关于全局元素的 minOccurs 的解释,例如here.
错误消息说 LimitedString50 无法解析为类型定义。这意味着它找不到该类型定义。简单类型 'LimitedString50' 在同一个 XSD 中定义,因此最可能的解释是您的模式具有非空 targetNamespace 但您的类型引用未指定该名称空间。
我无法验证这一点,因为您还没有发布整个 XSD。
<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: 添加到我的类型的前缀似乎有效,我不完全确定为什么,也许这里有人可以解释。发帖帮助他人。