我有xsd Schema,以及根据该架构的gml文件。当所有属性都具有值(可选和必需)时,gml文件对模式有效。但是当我故意删除某些元素上的几个可选属性时,验证器会说gml对模式无效。
所有可选元素都具有属性nullable =" true"。
这里有什么问题?
示例:
架构的一部分:
<xsd:complexType name="ADM_DrzavaType" final="#all">
<xsd:complexContent>
<xsd:extension base="fgu:KatastarskiGeoObjektType">
<xsd:sequence>
<xsd:element name="sifra" type="fgu:CL_ADM_Drzava_Sifra"/>
<xsd:element name="naziv" type="fgu:CL_ADM_Drzava_Naziv"/>
<xsd:element name="sluzbena_Povrsina" type="xsd:positiveInteger" nillable="true"/>
<xsd:element name="povrsina" type="xsd:double" nillable="true"/>
<xsd:element name="geometrija" type="gml:MultiSurfacePropertyType"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
部分&#34;无效&#34; gml(sluzbena_Povrsina和povrsina是空的):
<fgu:ADM_Drzava gml:id="Drzava-234">
<fgu:oid>1122115522125</fgu:oid>
<fgu:transaction_Time gml:id="Drzava-234-1">
<gml:beginPosition>20140717190255</gml:beginPosition>
<gml:endPosition>20140717190255</gml:endPosition>
</fgu:transaction_Time>
<fgu:valid_Time gml:id="Drzava-234-2">
<gml:beginPosition>20140717190255</gml:beginPosition>
<gml:endPosition>20140717190255</gml:endPosition>
</fgu:valid_Time>
<fgu:lineage_Parent>1122115522124</fgu:lineage_Parent>
<fgu:lineage_Child>1122115522127</fgu:lineage_Child>
<fgu:napomena>asd</fgu:napomena>
<fgu:greska>false</fgu:greska>
<fgu:izvor_Geometrije>GNSS</fgu:izvor_Geometrije>
<fgu:sifra>BiH</fgu:sifra>
<fgu:naziv>Bosna i Hercegovina</fgu:naziv>
<fgu:sluzbena_Povrsina></fgu:sluzbena_Povrsina>
<fgu:povrsina></fgu:povrsina>
<fgu:geometrija>
<!-- this element is long to much, so I will omit it. -->
</fgu:geometrija>
</fgu:ADM_Drzava>
修改
部分模式中缺少的元素继承自其他功能(base =&#34; fgu:KatastarskiGeoObjektType&#34;)。
答案 0 :(得分:2)
这是一个纯粹基于XML的答案,因为它似乎使用的是非地理标记语言(GML)架构。如果您使用过GML架构,我不确定这个答案是否适用。
在XML中,数字不能留空。 sluzbena_Povrsina(positiveInteger)和povrsina(double)都是数字,因此以下语法将始终无效:<fgu:povrsina></fgu:povrsina>
使用nillable="true"
将这些元素标记为nillable要求实例文档使用以下语法显式声明元素为nill:<fgu:povrsina xsi:nill="true" />
更改这些行:
<fgu:sluzbena_Povrsina></fgu:sluzbena_Povrsina>
<fgu:povrsina></fgu:povrsina>
对此:
<fgu:sluzbena_Povrsina xsi:nill="true" />
<fgu:povrsina xsi:nill="true" />
它应该验证。
****** [其他选项] ******
这可能是也可能不是一个选项,但您可以考虑删除nillability并添加minOccurs =“0”,如下所示:
<xsd:element name="sluzbena_Povrsina" type="xsd:positiveInteger" minOccurs="0" />
这将允许您将元素完全保留在实例文档之外,但如果元素存在但仍为空,则它仍然无效。
另一种选择可能是指定一个默认值:
<xsd:element name="sluzbena_Povrsina" type="xsd:positiveInteger" default="0" />
填写零空白条目可能无效。根据此数字所代表的含义,零可能会导致意外结果。
请注意,某些类型(例如字符串)确实接受空值。