代码之家  ›  专栏  ›  技术社区  ›  Chris Welsh

限制xsd中的空元素

  •  6
  • Chris Welsh  · 技术社区  · 15 年前

    是否有方法防止表单中的空元素 <myElement/> 在XML中使用?换句话说,可以在xsd中指定 <MyElement/> 无效吗?

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

    2 回复  |  直到 15 年前
        1
  •  10
  •   Travis Gockel    15 年前

    如果你试图阻止元素出现,你可以用 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>
    
        2
  •  4
  •   Rookie Programmer Aravind    15 年前

    如果模式验证无法显示错误,当数据类型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>
    

    注意,我还包括一个schema文件,其中包含date\u type类型的定义,
    以下是日期定义文件:

    <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,不接受空值或任何其他格式的日期, 如果还希望接受空标记,则替换模式为…

    <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])"/>
    

    其验证接受空标记或模式mm/dd/yyyy的日期值。

    如果你需要更多的模式设计方面的帮助,那么请随意在so中发表文章,希望对你有所帮助。-)

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