0

假设我有一个这样的 XML:

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

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

提前致谢!

4

1 回答 1

3

简短的回答:没有。

中等答案,根据“XML Schema Part 1: Structures Second Edition”,“3.2.1 属性声明模式组件”部分:“默认指定属性无条件地出现在·post-schema-validation infoset·中,带有当属性实际不存在时使用的提供值”

长而实用的答案:关键是“后模式验证信息集”。所以问问自己,你需要模式文档做什么?

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