代码之家  ›  专栏  ›  技术社区  ›  bortzmeyer

W3CXML模式和maxOccurs的最大整数

  •  2
  • bortzmeyer  · 技术社区  · 16 年前

    拒绝使用架构:

    traceroute.xsd:658: element element: Schemas parser error : Element
     '{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value
     '4294967295' is not valid. Expected is '(xs:nonNegativeInteger | unbounded)'.
    

    有符号的32位数字,这还不够。

    整数:

    http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#p-max_occurs http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#nonNegativeInteger

    非负整数的值空间 是无限集{0,1,2,…}。

    所以,实现者应该使用无限整数。。。

    最佳实践是什么?

    实现者应该使用bigint或类似的东西吗?(在这种情况下,

    模式作者是否应该将自己限制在 作者)

    2 回复  |  直到 16 年前
        1
  •  4
  •   Jeff Yates    16 年前

    也许是“技术上”正确使用 maxOccurs 属性,此用法不是(IMO)如何 最大发生次数 是要使用的。

    架构编写器似乎意在表示此元素可能出现任意次数,在这种情况下,定义的正确值将是 unbounded .

    当前的定义意味着,使用此模式的系统将完全正确地运行元素计数,直到 4294967295

    我想这是一个有意义的技术要求-很多系统 int32 编码为元素的最大数量,因此在理想的世界中,您可能希望强制执行此限制,但我认为在现实世界中尝试捕获模式并不是一件合理或有用的事情。

    我建议模式作者使用 属性值,或使用与使用此XML的系统的限制和要求实际匹配的值。

        2
  •  2
  •   bortzmeyer    16 年前

    RFC 5388 现在它包含:

         <xs:element maxOccurs="2147483647" minOccurs="0"
                     name="Measurement">
           <xs:complexType>
             <xs:sequence>
    
        3
  •  1
  •   Chanh Tran    5 年前

    maxOccurs的最大值是4095。
    如果需要更多,请将其设置为“unbounded”。
    参考: https://docs.microsoft.com/en-us/biztalk/core/technical-reference/max-occurs-node-property-of-all-schemas

    希望能帮上忙!