限制xsd中的空元素
有没有办法阻止在你的xml中使用<myElement/>
形式的空元素?换句话说,你可以在你的xsd中指定<myElement/>
是无效的吗?限制xsd中的空元素
使用nillable="false"
不起作用,也不 - 这两种都允许 <myElement/>
。
如果您试图防止元素出现,可以用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>
如果你的架构验证是不是能够显示错误,当数据类型为DATE的元素为null,那么你可以使用一个模式[如果输入所需格式不是你的负担];
我增加了一个例子,执行类似的代码将在你的工具工作,
这是样本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,空值或日期与任何其他格式不被接受, 如果你想也接受空标签,在这个替换模式..
<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文件中提到 额外的名称空间中定义,定义 外部文件无害和 可重复使用]
感谢您的详细回复。我设法找到正确进行验证的工具。这种模式的东西是有用的,寿。 – 2010-03-25 08:44:51
@Chris,np [15个字符] – 2010-03-25 09:14:44
这看起来很有前途。如果它不是一个简单的类型,例如“xsd:date” – 2010-03-08 08:16:23
'xsd:date'是一个简单的类型。但是如果它不是一个简单的类型,你可以使用''。尽管如此,我通常使用'xsd:element'的'type'属性,即:' '' –
2010-03-08 08:27:41
所以你说'minLength'是一个非字符串简单类型的有效属性? – 2010-03-08 08:42:57