0

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

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

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

<Request Name="Marty Jones"/>

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

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

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

4

3 回答 3

1

您还没有显示您的架构,也没有解释您正在做什么处理。

如果您通过为属性定义默认值的模式来验证给定的 XML,那么文档的“后模式验证信息集”将包含默认值。从提供的证据来看,要么您没有完成验证,要么您显示的不是 PSVI。

于 2013-01-11T18:22:30.363 回答
1

许多 XSD 感知工具在编写 XML 时都会这样做。这个想法是,如果省略等于默认值的值(假设它们是可选的),它会使 XML 更短且更具可读性。例如,对于 XSD 本身,minOccurs="1"或的任何值maxOccurs="1"在写出时都将被省略 - 想象一下,如果您的 XSD 将它们包含在每个<element>,<sequence><choice>中,它们可能会变得多么混乱。

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

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

顺便说一句:这里有一个关于这个问题的问题,带有指向特定工具的其他问题的链接。(例如 MarkLogic 有一个开关):

Xml Schema 规范是否使用默认值定义了可选属性的序列化?

于 2013-01-12T04:15:32.260 回答
0

属性声明具有“use”属性,它可以取“required”的值,但它不适用于“default”。简而言之,您想要以下内容但无效。

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

简而言之,您不能分配默认值并使该属性成为强制性的。

于 2013-01-11T19:36:02.100 回答