<Container>
<MyObject>
<property1>abcd</property1>
<property2>
<Version>3.2</Version>
</property2>
</MyObject>
<Contained>
<MyObject>
<property1>something</property1>
<property2>
<Version>1.1</Version>
<Version>1.2</Version>
<Version>1.6</Version>
</property2>
</MyObject>
<MyObject>
<property1>something else</property1>
<property2>
<Version>2.3</Version>
<Version>2.5</Version>
<Version>2.6</Version>
</property2>
</MyObject>
</Contained>
</Container>
鉴于这个xml结构,在相应的xsd文件中,我可以对Version属性设置max发生限制,这样如果MyObject直接包含在Container中,它应该只发生一次,但如果MyObject包含在Contained中,它可能会发生多次?
基于similar question,我倾向于认为这不可能,但我想确定。
答案 0 :(得分:1)
简短的回答是否定的,使用XSD 1.0无法做到。如果您可以向上移动版本或添加到Schematron混合断言,那么您可以。或者,如果纯XSD 1.0是唯一的答案,那么我会尝试找到一种改造的方法; @ penartur可以让你知道从哪里开始(我会通过扩展重用,确保在内容模型的末尾建模“差异”,以允许扩展工作它的魔力)。
答案 1 :(得分:0)
从您的代码来看,似乎逻辑上,Container/MyObject
和Container/Contained/MyObject
是不同的类型,尽管它们的名称。
所以我在XSD中为这些声明了两种不同的类型。一个用于Container/MyObject
maxOccurs="1"
,另一个用于Contained/MyObject
maxOccurs="whateverYouWant"
。