And*_*rei 1 xml xsd xsd-validation
我知道这个相关问题,我理解我的问题与答案相矛盾,但以下XML文件完全符合以下XMLSchema
我的XML数据:
<?xml version="1.0" encoding="utf-8"?>
<myElements>
<el1>bla</el1>
<el1>bla</el1>
<el1>blabla</el1>
<el2>bgt</el2>
<el2>pel</el2>
<el3>sdf</el3>
</myElements>
Run Code Online (Sandbox Code Playgroud)
我的XMLSchema:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="myElements">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="el1" />
<xs:element name="el2" />
<xs:element name="el3" />
<xs:element name="el4" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
W3学校和其他消息来源说:
XML Schema choice元素只允许声明中包含的一个元素出现在contains元素中.
在我看来,这意味着我的XML数据应该只接受其中一个:
但是,如果您尝试将我的xml数据验证到我的xmlschema,它是有效的,我不明白为什么.
我是否完全误解了文档?
我使用的验证器是否松散且非标准?如果是的话,什么是一个好的验证器,为什么有人会在我描述的情况下使用选择?(是的,我确实遇到过这个)
为什么在生成的xml 中
xs:choice允许多个不同xs:element的?
因为你加入maxOccurs="unbounded"了xs:choice.
您对什么xs:choice/@maxOccurs="unbounded"方法的理解需要调整.
这并不意味着您首先做出选择,然后根据事件约束重复所选元素xs:choice.
它确实意味着您可以根据事件约束进行多次选择xs:choice.选择是独立的,因此xs:choice当xs:choice/@maxOccurs大于时,子元素可以交错1.
如果你想表达可以做出单一选择的约束,并且所选择的元素可以连续重复,那么maxOccurs="unbounded"就放在孩子身上xs:choice而不是xs:choice自己身上.
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |