我想使用XSD为XML创建条件验证。我想如果元素Unit是“uri”那么元素Value必须包含“http”,否则如果元素Unit是“date”那么元素Value必须是时间戳,依此类推......我开始简单的验证使用xs:assert并且不起作用。我已经测试了xs:assertion,但它产生了同样的错误。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false);
binding.setTest(new TestVM());
return binding.getRoot();
}
xmllint --noout --schema metadata.xsd metadata.xml
metadata.xsd:46: element assert: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}complexType': The content is not valid. Expected is (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)))).
WXS schema metadata.xsd failed to compile
答案 0 :(得分:1)
xs:assert和xs:assertion需要XSD 1.1处理器。但是您使用的是xmllint,这是一个XSD 1.0处理器。
答案 1 :(得分:1)
正如@potame和@MichaelKay所说,当xs:assert
需要XSD 1.1处理器时,您的错误是由于xs:assert
使用XSD 1.0处理器。
您有几个选择:
关于#4,您的XML现在非常抽象。如果你要转向更具体的元素命名,XSD 1.0可以为你做更多的类型检查。例如,当Unit
为Value
时,您可以只使用Unit
类型的uri
元素,而不是需要对URI
元素进行特殊检查的xsd:anyURI
元素。 {1}}。 (事实上,对于它是什么而不是类型 ,您可能更具体,名称URI
;例如:Homepage
或PaymentAPIEndpoint
。)