如何向ComplexType元素添加空值限制

时间:2016-03-16 20:00:25

标签: xml validation xslt xsd

我有一个xml

<name>
    <l10n lang="en">abc</l10n>
</name>

此元素的关联xsd为:

<xs:schema elementFormDefault="qualified" targetNamespace="http://iddn.icis.com/ns/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:c="http://iddn.icis.com/ns/core" xmlns:conf="http://iddn.icis.com/ns/config" xmlns="http://www.w3.org/1999/xhtml">
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd">
</xs:import>
 <xs:complexType name="i18n-value">
      <xs:sequence>
         <xs:element name="l10n" maxOccurs="unbounded">
            <xs:complexType>
               <xs:simpleContent>
                  <xs:extension base="xs:string">
                     <xs:attribute ref="lang" use="required"/>
                  </xs:extension>
               </xs:simpleContent>
            </xs:complexType>
         </xs:element>
      </xs:sequence>
   </xs:complexType>

<xs:element name="name" type="c:i18n-value"/>
</xs:schema>

现在我想对元素添加限制&#39; l10n&#39;以某种方式,它的值不应该为null,并且应该抛出模式验证错误,如果输入是:

<name>
    <l10n lang="en"></l10n>
</name>

到目前为止,我已经尝试过模式选项,例如 nillable minOccurs ,但没有运气。有人可以建议我解决这个问题的可能方法。

注意: 请忽略xsd或xml中缺少的任何名称空间。

2 个答案:

答案 0 :(得分:0)

实际上,你真正想要的是对元素添加限制&#39; I10n&#39;以某种方式,它的值不应该为空。在XML Schema中,空值与空值不同。您需要创建一个不能为空的简单类型。要做到这一点 - 创建一个新的简单类型,它是xs:string的限制 - 添加一个方面minLength =&#34; 1&#34;。 - 使用这种简单类型作为复杂类型与简单内容的基本类型

为了完整性,通过添加属性xsi:nil =&#34; true&#34;显式地表示XML中的null(或更准确,nil)值。在XML Schema中对其进行建模时,等效元素声明必须具有xs:nillable =&#34; true&#34;,否则将是错误。

minOccurs属性指定标记的最小出现次数;它没有说明标签的内容。

答案 1 :(得分:0)

使用以下标记,其中包括检查空,空和空格

 <xs:simpleType>
    <xs:restriction base="xs:string">
                    <xs:whiteSpace value="collapse"/>
                   <xs:minLength value="1"/>
                 </xs:restriction>
        </xs:simpleType>