将帖子
我对xsd / xslt的了解非常有限,如果我的问题非常基础或某种程度上不清楚,请原谅我。我认为我的需要是基本的,但我可能会对这些术语感到困惑,因为我找不到任何相关或接近的答案。
我的.xsd文件中有以下结构:
<xs:element name="someelement">
...
<xs:attribute name="attr1" type="xs:NCName"/>
...
<xs:attribute name="attr2" type="xs:NCName"/>
...
我知道在.xsd中我可以设置use =“Required”来强制使用属性。 (强制性我的意思是如果验证失败)
但就我而言,只有“attr2”具有一定值时,“attr1”才是强制性的。
可以这样做吗? (在.xsd文件或.xslt?中)
我希望完成这个行为:
if element is “someelement” and
attribute "attr2" equal "somevalue" then
set use="Required" for "attr1"
else
"attr1" should not be mandatory
如果使用标准的xsi:type
属性,则必须引用模式中的类型声明,并且它引用的类型声明可以是定义要求的其他属性的默认类型的限制。
如果你想使用像你的混淆命名的xsitype
这样的用户定义属性,这对于模式处理器没有特殊意义,那么实现这一点的方法是使用条件类型赋值(又名xs:alternative),这需要一个XSD 1.1处理器。
更新(解决经修订的问题)
你无法在XSD 1.0中实现这一点。它可以在XSD 1.1中使用条件类型赋值(aka xs:alternative)来完成。你定义了两种类型,typeA
与attr1
可选和typeB
需要attr1
,然后你使用someElement
定义xs:alternative
的类型,所以当typeA
和@attr eq 'someValue'
否则它有typeB
。通常typeB
将被定义为typeA
的限制。