我遇到了很多规范如下:
<xs:complexType name="SomeTypeList">
<xs:sequence>
<xs:element name="some" type="SomeType" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
在消息规范中,列表本身是可选的(minOccusr =“0”)。
上面的样式意味着如果列表存在,它总是有项目。
但这真的比将列表指定为强制列表并允许它为空是更好吗?
答案 0 :(得分:0)
将其视为另一个难题:当您构建一个寻找可能没有任何成员的列表的API方法(Java,.NET,PHP等)时,您应该返回null还是空列出?
以this(Windows)为例,以此为例;是说:如果DirectoryInfo中没有文件,则此方法返回一个空数组。
Or this(在Java中):返回此方法抛出的异常的类型签名,按照源中声明的顺序,如果此方法不引发异常,则为空数组。
关于一般的返回值或空值的最佳做法......或与PHP相关的this one(来自Google的随机选择,与其无关):最初的问题是可预测性:如果你有一个返回一系列事物的函数,并且没有东西可以返回,你应该返回一个空数组。不是假,不是NULL,是一个空数组。为什么?因为我想foreach()而不是它。
看起来很适合API;但是,如果你正在研究XML的“美观”标准,那么对于所有那些空的列表来说,拥有大量空XML标签似乎是丑陋无用的......
我会说答案是猜测的。
我的投票......在XSD中,我首先尝试不对示例中显示的列表进行建模;如果需要重用,请与团队一起使用。在重复元素之上有一个列表类型,在将XSD绑定到Code时会产生质朴的API。另外,如果你的XSD的复杂性以某种方式通过深度或你的树来衡量(至少我做了很多复杂度指标分析),你显然只是添加了一个级别。
如果我必须支持xsd:all,我只会这样做;在这种情况下,我会完全按照您在代码段中显示的内容进行操作。这样,您就知道电线上的每个标签都有一个 raison d'être。