限制 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: 添加到我的类型的前缀似乎有效,我不完全确定为什么,也许这里有人可以解释。发帖帮助他人。