使用XSD模式进行XML验证-ValidationEventHandler信息
我有一个模式:使用XSD模式进行XML验证-ValidationEventHandler信息,xml,validation,c#-4.0,xsd,schema,Xml,Validation,C# 4.0,Xsd,Schema,我有一个模式: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="address"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="address">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="street" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
据我所知,大多数模式验证器几乎不允许定制错误报告。要生成为最终用户设计的错误消息,最好使用Schematron,这是它的主要设计目标之一 另一种方法是使用Saxon的模式验证器,该验证器能够生成XML验证报告,然后可以使用XSLT将其转换为最终用户术语。例如,验证报告应为:
<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
system-id="file:/Users/mike/Desktop/temp/test.xml">
<error line="6"
column="14"
path="/Q{}address[1]/Q{}country[1]"
xsd-part="2"
constraint="cvc-datatype-valid.1">The content "UK" of element <country> does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
<meta-data>
<validator name="SAXON-EE" version="9.8.0.3"/>
<results errors="1" warnings="0"/>
<schema file="test.xsd" xsd-version="1.1"/>
<run at="2017-08-10T18:36:16.694+01:00"/>
</meta-data>
</validation-report>
元素国家的内容“UK”与所需的简单类型不匹配。值“UK”与元素国家类型的最小长度方面“5”相冲突
您可以尝试在这方面使用XSLT模式匹配,以使消息更为最终用户友好
(我最终的目的是在这个验证报告中添加更多的语义标记,使之更容易,例如编写
minLength
和5
。但这仍然是一个愿望。)我所知道的大多数模式验证器几乎不允许定制错误报告。要生成为最终用户设计的错误消息,最好使用Schematron,这是它的主要设计目标之一
另一种方法是使用Saxon的模式验证器,该验证器能够生成XML验证报告,然后可以使用XSLT将其转换为最终用户术语。例如,验证报告应为:
<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
system-id="file:/Users/mike/Desktop/temp/test.xml">
<error line="6"
column="14"
path="/Q{}address[1]/Q{}country[1]"
xsd-part="2"
constraint="cvc-datatype-valid.1">The content "UK" of element <country> does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
<meta-data>
<validator name="SAXON-EE" version="9.8.0.3"/>
<results errors="1" warnings="0"/>
<schema file="test.xsd" xsd-version="1.1"/>
<run at="2017-08-10T18:36:16.694+01:00"/>
</meta-data>
</validation-report>
元素国家的内容“UK”与所需的简单类型不匹配。值“UK”与元素国家类型的最小长度方面“5”相冲突
您可以尝试在这方面使用XSLT模式匹配,以使消息更为最终用户友好
(我的意图最终是在该验证报告中添加更多语义标记,以使其更容易,例如编写
minLength
和5
。但这仍然是一个愿望。)因此,您需要进行验证,说明如果国家/地区小于最小值thrn,则应显示请输入长度大于5的字符串,但国家/地区只是一个示例。还有很多其他领域。我需要显示:“字段“country”的长度小于MinValue=5!请更正此项!”确切地告诉您想要实现什么?使用模式验证XML,如果存在验证错误,我希望在反馈中返回正确和清晰的信息。所以,当XML中有长度为4的国家时,我想显示客户机,长度必须大于4。您正在为此编写java代码吗?所以您需要进行验证,说明如果国家小于最小值thrn,则应显示请输入长度大于5的字符串。但国家是唯一的示例。还有很多其他领域。我需要显示:“字段“country”的长度小于MinValue=5!请更正此项!”确切地告诉您想要实现什么?使用模式验证XML,如果存在验证错误,我希望在反馈中返回正确和清晰的信息。所以,当XML中有长度为4的国家时,我想向客户展示,长度必须大于4。您正在为此编写java代码吗?谢谢您的回答。第一种方法需要准备xsd模式吗?我不能,因为我是从客户端得到的,我必须用这个模式检查转换后的数据。第二种方式,我需要付费才能获得带有模式验证的版本,是吗/是的,切换到Schematron是一个重大的变化,这就是为什么我建议第二个选择。至于第二种选择,我想你们不会免费为你们的客户提供服务,我也不会。谢谢你们的回答。第一种方法需要准备xsd模式吗?我不能,因为我是从客户端得到的,我必须用这个模式检查转换后的数据。第二种方式,我需要付费才能获得带有模式验证的版本,是吗/是的,切换到Schematron是一个重大的变化,这就是为什么我建议第二个选择。至于第二种选择,我假设你不会免费为你的客户提供服务,我也不会。
<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
system-id="file:/Users/mike/Desktop/temp/test.xml">
<error line="6"
column="14"
path="/Q{}address[1]/Q{}country[1]"
xsd-part="2"
constraint="cvc-datatype-valid.1">The content "UK" of element <country> does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
<meta-data>
<validator name="SAXON-EE" version="9.8.0.3"/>
<results errors="1" warnings="0"/>
<schema file="test.xsd" xsd-version="1.1"/>
<run at="2017-08-10T18:36:16.694+01:00"/>
</meta-data>
</validation-report>