首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XSD 1.1替代用法问题

XSD 1.1替代用法问题
EN

Stack Overflow用户
提问于 2013-02-15 01:16:40
回答 2查看 2.7K关注 0票数 1

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

但使用以下(最简单的)示例:

代码语言:javascript
运行
复制
<xsd:complexType name="BaseType">
    <xsd:attribute name="type" 
                   type="xsd:string" 
                   use="required" />
</xsd:complexType>  

<xsd:complexType name="NamedType">
    <xsd:complexContent>
        <xsd:extension base="BaseType">
            <xsd:attribute name="path" 
                           type="xsd:string" 
                           use="required" />
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>  

<xsd:complexType name="TaggedType">
    <xsd:complexContent>
        <xsd:extension base="BaseType">
            <xsd:attribute name="tag" 
                           type="xsd:string" 
                           use="required" />
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>  

<xsd:element name="MyRoot">
    <xsd:complexType>
          <xsd:choice minOccurs="1">
            <xsd:element name="MyType" 
                         type="BaseType">
              <xsd:alternative test="@type='Named'" 
                               type="NamedType"/>
              <xsd:alternative test="@type='Tagged'" 
                               type="TaggedType"/>
            </xsd:element>
          </xsd:choice>
    </xsd:complexType>
</xsd:element>

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

未知位置出现错误类型,第93行,第74列:替代元素的测试属性包含无效内容:{@ XSDError =‘Named’}。

我还尝试了在替代测试条件下使用"@type eq 'Named'“,以及大量其他合理和不合理的变体……未通过:/

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 04:05:24

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-15 02:25:50

您的XSD在我看来很好。我在QTAssistant (它最终基于XSD1.1的Xerces版本)中尝试过,它工作得很好。

使用下面的示例XML:

代码语言:javascript
运行
复制
<?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>

我得到了:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
<?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>

我得到了:

代码语言:javascript
运行
复制
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.

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14880381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档