为什么与模式中的默认值具有相同值的可选元素不会显示在事务中?

时间:2013-01-11 15:33:21

标签: xml xsd

我对请求和响应事务使用各种xml事务。响应事务回应请求事务,然后提供任何“命中”信息。我注意到当我尝试显示回声时,如果一个元素是可选的并且具有与默认值中提供的值相同的值,那么它将被省略。

<Request Name="Marty Jones" Education="0"/>

根据请求,如果需要'姓名'且'教育'是可选的,枚举为(0 - 无,1 - 高中,2 - 大学),默认为“0”。上面的元素将显示为:

<Request Name="Marty Jones"/>

如果我指定Education =“2”,那么它将显示为:

<Request Name="Marty Jones" Education="2"/>

是否有理由忽略可选的默认值?无论条件如何,我都想展示整个回声。

3 个答案:

答案 0 :(得分:1)

您尚未展示架构,并且尚未解释您正在进行的处理。

如果通过定义属性默认值的模式验证给定的XML,则文档的“post schema validation infoset”将包含默认值。根据提供的证据,要么您尚未进行验证,要么您正在显示的不是PSVI。

答案 1 :(得分:1)

许多支持XSD的工具在编写XML时都会这样做。我们的想法是,如果省略了与默认值相等的值(如果它们是可选的),它会使XML更短且更易读。例如,对于XSD本身,任何minOccurs="1"maxOccurs="1"的值都会在写出时被省略 - 想象一下XSD与每个<element>,{{1}中包含的XSD的混乱程度他们可以是,<sequence>等。

请注意,使用XSD进行分析时,不会区分默认值和默认值等于默认值 - 如果没有此信息,则工具无法重建最初使用的值。

然而,并非每个人都希望在每个应用程序中都有这种行为所以有些工具有一个配置开关来关闭它。由于整个问题不是XSD规范的一部分,因此任何此类配置开关都是依赖于工具的。所以你必须告诉我们你正在使用哪种工具。

BTW:这是一个关于这个问题的问题,还有关于特定工具的其他问题的链接。 (例如MarkLogic有一个开关):

Does the Xml Schema spec define the serialization of optional attributes with a default?

答案 2 :(得分:0)

属性声明具有“use”属性,该属性可以取值“required”但是它不能用于“default”。总之,你想要的东西如下,但无效。

<attribute name="Education" default="0" use="required/>

简而言之,您无法指定默认值并使该属性成为必需属性。