XSD 1.1替代使用问题

XSD 1.1替代使用问题,xsd,xsd-validation,xsd-1.1,Xsd,Xsd Validation,Xsd 1.1,我需要根据属性值对单一类型的节点进行特定的XSD验证:xsd1.1和XSD:alternative应该是我的朋友 但下面是一个(最简单的)例子: 当我加载XSD时(使用Qt4.7.4中的QXmlSchema类,但我认为这是XSD问题,而不是Qt问题),我得到以下错误: 未知位置第93行第74列出现错误XSDError:可选元素的测试属性包含无效内容:{@type='Named'} 我还尝试过在替代测试条件下使用“@typeeq‘Named’”,以及大量其他合理和不太合理的变化。。。无通过:/

我需要根据属性值对单一类型的节点进行特定的XSD验证:xsd1.1和XSD:alternative应该是我的朋友

但下面是一个(最简单的)例子:


当我加载XSD时(使用Qt4.7.4中的QXmlSchema类,但我认为这是XSD问题,而不是Qt问题),我得到以下错误:

未知位置第93行第74列出现错误XSDError:可选元素的测试属性包含无效内容:{@type='Named'}

我还尝试过在替代测试条件下使用“@typeeq‘Named’”,以及大量其他合理和不太合理的变化。。。无通过:/


任何帮助都将不胜感激!谢谢

我觉得你的XSD不错。我在QTAssistant(它最终基于Xerces版本的XSD1.1)中试用过,效果很好

使用此示例XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
    <MyType type="Tagged"/> 
</MyRoot>
使用此XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
    <MyType type="Named"/>  
</MyRoot>

按照建议修复上述内容将产生有效的XML结果。你的语法是正确的,所以我只能怪你的XSD处理器。

像Petru Gardea一样,我相信你的XSD模式很好(更重要的是,Saxon也是如此)

问题是您的XSD处理器不支持XSD1.1;“这个类用于表示符合XML Schema 1.0规范的模式。”错误消息可能更清楚一些(通过抱怨@type而不是xsd:alternative,它确实给出了错误的想法),但错误消息通常是这样的,毕竟,它通常会报告软件不准备处理的情况

Error while loading [], line 4 position 25
cvc-complex-type.4: Attribute 'tag' must appear on element 'MyType'.
Document1.xml is XSD 1.1 invalid.
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">
    <MyType type="Named"/>  
</MyRoot>
Error while loading [], line 4 position 24
cvc-complex-type.4: Attribute 'path' must appear on element 'MyType'.
Document1.xml is XSD 1.1 invalid.