具有枚举和联合的 xml 简单类型

发布于 2024-11-03 05:35:30 字数 1318 浏览 1 评论 0原文

解析以下 xml 架构会产生此错误:

元素属性:架构解析器错误:属性 decl。 “current-state”,属性“type”:QName 值“covered-state”未解析为简单类型定义。 WXS 模式 memory.xsd 无法编译

这里的负责代码:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.com">

    <xsd:simpleType name="covered-state">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                    <xsd:enumeration value="0"/>
                    <xsd:enumeration value="1"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="COVERED"/>
                    <xsd:enumeration value="UNCOVERED"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>

    <xsd:complexType name="MemoryCard">
        <xsd:attribute name="current-state" type="covered-state" use="required"/> <!-- here i get the error -->
    </xsd:complexType>

</xsd:schema>

所以这应该做的是联合字符串和整数的枚举,以便 xml 文件接受“0”或“1”或“COVERED”或“UNCOVERED”对于属性当前状态。

有人能指出我正确的方向吗?谢谢!

parsing the following xml schema produces this error:

element attribute: Schemas parser error : attribute decl. 'current-state', attribute 'type': The QName value 'covered-state' does not resolve to a(n) simple type definition.
WXS schema memory.xsd failed to compile

heres the responsible code:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.com">

    <xsd:simpleType name="covered-state">
        <xsd:union>
            <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                    <xsd:enumeration value="0"/>
                    <xsd:enumeration value="1"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="COVERED"/>
                    <xsd:enumeration value="UNCOVERED"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>

    <xsd:complexType name="MemoryCard">
        <xsd:attribute name="current-state" type="covered-state" use="required"/> <!-- here i get the error -->
    </xsd:complexType>

</xsd:schema>

So what this is supposed to do is to union an enumeration of strings and ints so that the xml file accepts "0" or "1" or "COVERED" or "UNCOVERED" for attribute current state.

Can someone point me in the right direction? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绿光 2024-11-10 05:35:30

你的建议也会起作用,但我是这样解决的:

    <xsd:attribute name="current-state" use="required">
        <xsd:simpleType>    
            <xsd:union>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:integer">
                        <xsd:enumeration value="0"/>
                        <xsd:enumeration value="1"/>
                    </xsd:restriction>
                </xsd:simpleType>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="COVERED"/>
                        <xsd:enumeration value="UNCOVERED"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:union>
        </xsd:simpleType>
    </xsd:attribute>

无论如何,谢谢!

your suggestions would work too but i solved it like this:

    <xsd:attribute name="current-state" use="required">
        <xsd:simpleType>    
            <xsd:union>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:integer">
                        <xsd:enumeration value="0"/>
                        <xsd:enumeration value="1"/>
                    </xsd:restriction>
                </xsd:simpleType>
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="COVERED"/>
                        <xsd:enumeration value="UNCOVERED"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:union>
        </xsd:simpleType>
    </xsd:attribute>

thanks anyway!

归途 2024-11-10 05:35:30

type="covered-state" 是对无命名空间中的类型的引用,但您想要对命名空间中具有本地名称 "covered-state" 的类型的引用 <代码>“http://www.example.com”。要实现这一点,您需要将前缀(例如 e)绑定到此名称空间并将其引用为 type="e:covered-state"

type="covered-state" is a reference to a type in no namespace, but you want a reference to a type with local name "covered-state" in namespace "http://www.example.com". To achieve that you need to bind a prefix (say e) to this namespace and refer to it as type="e:covered-state".

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文