是否可以在XSD中将属性的默认值设置为其他属性的值?

时间:2012-10-16 07:36:13

标签: xml xsd xml-attribute

假设我有这样的XML:

<foo ...>
   <bar a="s1" b="s2" />
   <bar a="s3" />
</foo>

我想在XSD中定义属性b的默认值应该是属性a的值。这可能吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

简答:不。

根据“XML Schema Part 1:Structures Second Edition”,“3.2.1属性声明模式组件”一节中的答案:“ default 指定该属性无条件地出现在·模式后验证信息集·,当属性实际不存在时使用提供的值“

长而实用的答案:关键是“后架构验证信息集”。那么问问自己,您需要什么样的架构文档?

  • 如果您需要它来验证传入的XML文档,那么只需使用use="required"来获取属性b
  • 如果你需要它来构建对象(例如,使用一些(非)编组技术,如Java的JAXB或.NET的XmlSerializer),那么你必须明确地添加一些后处理,以满足这种“后架构 - validation-infoset“term - 您应该检测b的值是否未设置并自行设置 - 这是您的业务要求
  • 如果您需要传达您的意图(*我/我的应用会将空b视为具有与a相同的值)添加文档。 XML Schema没有这样的概念。使用外推 - 这与“b的值将是当前美元/欧元比率”的要求相同“ - 它只是计算值