如果你有一个XML模式,它规定一个元素有一个默认值,然后你有一个XML文件跟在那个完全省略该元素的模式之后它仍然有效吗?
即。如果元素丢失,验证器只是说确定元素丢失了,所以我们采用模式中定义的默认值,XML是否有效?
所以可能是这样的:
<xs:element name="test" type="xs:boolean" default="false"/>
那么一个错过“example”元素的XML文件是否有效?
我问的原因是因为我看过许多使用属性的元素的模式:minOccurs="0"
,这推断出如果缺少那些元素,那么它仍然会被验证。我的问题是它是否会验证是否未指定minOccurs
但是指定了默认值?
感谢。
答案 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)
minOccurs
和default
指的是两个不同的概念。您的问题需要更多上下文才能完全回答。 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
表示您可以省略元素。