XML架构/验证查询 - 缺少元素

时间:2010-11-30 21:33:14

标签: xml

如果你有一个XML模式,它规定一个元素有一个默认值,然后你有一个XML文件跟在那个完全省略该元素的模式之后它仍然有效吗?

即。如果元素丢失,验证器只是说确定元素丢失了,所以我们采用模式中定义的默认值,XML是否有效?

所以可能是这样的:

<xs:element name="test" type="xs:boolean" default="false"/>

那么一个错过“example”元素的XML文件是否有效?

我问的原因是因为我看过许多使用属性的元素的模式:minOccurs="0",这推断出如果缺少那些元素,那么它仍然会被验证。我的问题是它是否会验证是否未指定minOccurs但是指定了默认值?

感谢。

2 个答案:

答案 0 :(得分:2)

不,省略没有minOccurs="0"的元素无效 - 即使该元素上指定了default

在XML Schema中,元素可以有默认值!大多数人都熟悉属性的默认值(这也是DTD中可用的功能),但是元素的默认值不常见。

对于元素,仅当元素存在且为空时才使用默认值。这与属性不存在时使用默认值的属性不同

举个例子:

<xs:element name="foo">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="test" type="xs:boolean" default="false"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

以下实例不是架构有效,因为必须有一个test元素。默认值没有区别,因为没有test元素。

<foo></foo>

以下实例 架构有效且test元素采用默认值(在本例中为“false”),因为test元素存在且是空的。

<foo><test></test></foo>

注意:如果XML Schema没有指定默认值,那么上述两个示例实例显然都不是架构有效的。在第一个示例中,当需要其中一个元素时,没有test元素。在第二个示例中,有一个test元素,但其内容为空,空字符串不是xs:boolean的有效值。

答案 1 :(得分:1)

minOccursdefault指的是两个不同的概念。您的问题需要更多上下文才能完全回答。 minOccurs是指元素作为另一个元素的子元素出现的次数。 default引用字符串值(有时键入 - 例如此处为布尔值)。您对元素default的使用是invalid

这是属性的默认值(来自w3schools)

  

默认为   属性

     

属性可以指定默认值。

     

默认值是自动的   没有时分配给属性   指定了其他值。

     

在以下示例中为默认值   值是“EN”:

<xs:attribute name="lang" type="xs:string" default="EN"/>
  

和minOccurs

<xs:element name="person">  
     <xs:complexType>
         <xs:sequence>
           <xs:element name="full_name" type="xs:string"/>
           <xs:element name="child_name" type="xs:string"
           maxOccurs="10" minOccurs="0"/>
         </xs:sequence>
   </xs:complexType>
 </xs:element>
  

上面的例子表明了   “child_name”元素可以出现一个   最小零次和最大值   在“人”元素中十次。

default是指属性中的字符串值。 minOccurs表示您可以省略元素。