【问题标题】:XSD: default value of a missing elementXSD:缺失元素的默认值
【发布时间】:2013-09-09 09:13:41
【问题描述】:

是否可以为 XML 模式中的缺失元素定义默认值。我有以下sn-p:

<xs:element name="protocol" nillable="false" minOccurs="0" default="ftp">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="ftp"/>
      <xs:enumeration value="webdav"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

如果我在 XML 文件中有

<protocol>ftp</protocol>

<protocol>webdav</protocol>

它验证并且我获得了正确的值。 如果我在 XML 文件中有

<protocol></protocol>

它也验证了,我获得了 ftp 的默认值。

我的搜索显示默认属性值在缺少属性时应用,而默认元素值在元素为空时应用。是否可以为缺少的元素设置默认值?

问候

兰比乌斯

【问题讨论】:

  • minOccurs 应该是 1
  • 我希望协议元素是可选的,但如果缺少,它应该是 ftp。看起来这是不可能的,我应该在应用程序中处理该逻辑,而不是在架构中。

标签: xml xsd


【解决方案1】:

没有。 XSD 不提供。

您可以指定元素的默认值。 但是一旦它丢失(当它的父级的内容模型允许时), 对该元素的任何请求都将返回空字符串或 null(或只是一个错误)。 缺少的元素是不存在的元素!

对于属性是可能的,因为属性要简单得多。 元素的所有属性有效地构成了一组无序的命名简单值。没有某种属性树(具有可变结构)附加到父元素。

但是对于元素,事情要复杂得多。 如果允许有关缺失元素的“默认”内容,那将导致很多歧义。例如,必须指定某种“默认内容”, 这将是一些自动唤起的元素序列来代替空虚...... 甚至是一些可能的“默认内容”,当只有一些元素被明确指定而其他元素必须隐含地补充它们时(默认情况下),每个元素都会唤起。 …… 好吧,如果您进一步考虑,事情变得令人难以置信的复杂。 那时必须创建另一种语言!但目的是什么?

【讨论】:

【解决方案2】:

调用这个函数

def _get_(x):
  if x is not None:
     return(x.text)
  else:
    # print('Setting Blank')
     return ''
_get_(parent.find('childtag'))

【讨论】:

    猜你喜欢
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多