限制xsd中的空元素

时间:2010-03-08 08:01:55

标签: xml validation xsd

有没有办法防止在xml中使用<myElement/>形式的空元素?换句话说,您可以在xsd中指定<myElement/>无效吗?

使用nillable="false"不起作用,minOccurs="1"也不起作用 - 两者都允许 <myElement/>

2 个答案:

答案 0 :(得分:10)

如果您试图阻止该元素出现,可以使用minOccurs="0"进行标记。我猜这不是你想要的,所以如果你想确保复杂元素总是附加属性,那么你必须在至少一个属性上指定usage="required"或使用属性组。如果myElement是一个简单类型,并且您希望确保它具有值,那么您始终可以限制它的类型。如果你想要一个非零字符串,那么你可以这样做:

<xsd:element name="myElement">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

答案 1 :(得分:4)

如果您的模式验证无法显示错误,那么当数据类型DATE的元素为空时,您可以使用模式[如果您输入所需格式不是负担];

我添加了一个示例,类似代码的实现将适用于您的工具,

这是示例XML:

<root>
   <date1>12/31/1999</date1> <!-- The Date format defined here is MM/DD/YYYY, null value or Date with any other format aren't accepted-->
</root>

这是相应的XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="Date_Def.xsd"/>
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="date1" type="DATE_TYPE" minOccurs="0" maxOccurs="1" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

注意我还包含一个包含DATE_TYPE类型定义的模式文件,
这是Date_Def.xsd文件:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="DATE_TYPE">
    <xs:restriction base="xs:string">
      <xs:pattern value="([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

此处定义的日期格式为MM / DD / YYYY,不接受任何其他格式的空值或日期, 如果你也想接受一个null标签,那就用这个替换模式..

<xs:pattern value="|(([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9])"/>

验证接受null标签或模式MM / DD / YYYY的日期值。

如果您需要更多关于图案设计的帮助,请随意将其作为SO中的帖子,希望它有所帮助。 : - )

  

[注意::类型定义也可以   在需要的同一文件中定义   提到的其他名称空间   XML以及XSD文件,定义了   外部文件是无害的   可重复使用]