XSD 架构错误:XmlSchema 错误:元素 http://www.w3.org/2001/XMLSchema:element 在此上下文中无效

Posted

技术标签:

【中文标题】XSD 架构错误:XmlSchema 错误:元素 http://www.w3.org/2001/XMLSchema:element 在此上下文中无效【英文标题】:XSD schema error: XmlSchema error: Element http://www.w3.org/2001/XMLSchema:element is invalid in this context 【发布时间】:2020-05-04 17:46:39 【问题描述】:

我正在尝试验证此 XML 文件 第 127 行 XmlSchema 错误:元素 http://www.w3.org/2001/XMLSchema:element 在此上下文中无效。第 125 行,位置 4。相关架构项 SourceUri:virtual://server/schema.xsd,第 177 行,位置 2。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:msg="urn:smco.messages" xmlns:md="urn:smco.marketData" xsi:schemaLocation="urn:smco.messages schema/smco_marketData-messages.xsd"
elementFormDefault="qualified">
    <xs:element name="msg:messageStandard">
        <xs:complexType>
            <xs:sequence>

                <xs:element name="msg:messageId" type="xs:token"/>
                <xs:element name="msg:timeStamp" type="xs:dateTime"/>
                <xs:element ref="msg:messagePublisher" type="xs:token"/>
                <xs:element name="msg:singleObjectMessage" maxOccurs="unbounded" />
                <xs:element name="msg:messageObjectCount" type="xs:decimal"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>


    <xs:simpleType name="type-dates_openEnded">
        <xs:annotation>
            <xs:documentation xml:lang="EN">XML date type with the token 'open' where 'open' is later/before (greater/lesser) than any date value</xs:documentation>
        </xs:annotation>
        <xs:union memberTypes="xs:date">
            <xs:simpleType>
                <xs:restriction base="xs:token">
                    <xs:enumeration value="open"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:union>
    </xs:simpleType>

    <xs:complexType name="type-scheme">
        <xs:annotation>
            <xs:documentation xml:lang="en">The base class for all types which define coding schemes. An instance uses the </xs:documentation>
            <xs:documentation xml:lang="en">An instance uses the attributes to fully specify the value domaine by stating it's identification and linking to the documentation of its scope and description of each of its possible values.</xs:documentation>
        </xs:annotation>
        <xs:simpleContent>
            <xs:extension base="xs:normalizedString">
                <xs:attribute name="schemeValues" type="xs:anyURI"/>
                <xs:attribute name="schemeCode" type="xs:normalizedString"/>
                <xs:attribute name="schemeName" type="xs:normalizedString"/>
                <xs:attribute name="schemeVersion" type="xs:normalizedString"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:simpleType name="type-iso.country">
        <xs:annotation>
            <xs:documentation xml:lang="EN">Must conform to ISO 3166 - Representation of Countries</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:normalizedString">
            <xs:pattern value="[A-Z][A-Z]"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="type-iso.currency">
        <xs:annotation>
            <xs:documentation xml:lang="EN">Must conform to ISO 4217 - Representation of Currency and Funds</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:normalizedString">
            <xs:pattern value="[A-Z][A-Z][A-Z]"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="type-iso.market">
        <xs:annotation>
            <xs:documentation xml:lang="EN">Must conform to ISO 10383 - Representation of Market Identification Codes</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="[A-Z][A-Z][A-Z][A-Z]" />
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="type-msg.identificationCode">

        <xs:sequence>
            <xs:element name="msg:codeLevel" type="type-msg.identificationLevel"/>
            <xs:element name="msg:startDate" type="type-dates_openEnded">

            </xs:element>
            <xs:element name="msg:endDate" type="type-dates_openEnded">

            </xs:element>
            <xs:element name="msg:codeType" type="type-scheme">

            </xs:element>
            <xs:element name="msg:code" type="xs:string">

            </xs:element>

        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="type-inst.identificationCode">
        <xs:sequence>
            <xs:element name="inst:codeLevel" type="type-identificationLevel"/>
            <xs:element name="inst:startDate" type="type-dates_openEnded">
            </xs:element>
            <xs:element name="inst:endDate" type="type-dates_openEnded">
            </xs:element>
            <xs:element name="inst:codeType" type="type-scheme">

            </xs:element>
            <xs:element name="inst:code" type="xs:string">
            </xs:element>

        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="type-localizedString">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="language" type="xs:language"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="type-msg.identificationLevel">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="level" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="type-msg:scope">
        <xs:simpleContent>
            <xs:element name="msg:market" type="type-scheme"/>
            <xs:element name="msg:actionType" type="xs:token"/>
        </xs:simpleContent>
        <xs:attribute name="intent" type="xs:string"/>
        <xs:attribute name="level" type="xs:string"/>
    </xs:complexType>


    <xs:complexType name="type-messagePurpose">
        <xs:sequence>
            <xs:element name="msg:effectiveDate" type="xs:date"/>
            <xs:element name="msg:intendedScopes">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="msg:scope" type="type-msg:scope"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>


    <xs:element name="msg:singleObjectMessage" >
        <xs:complexType>
            <xs:sequence>
                <xs:element name="msg:messagePurpose" type="type-messagePurpose"/>
                <xs:element name="msg:content" type="content-marketQuotes"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="type-dataPoint">
        <xs:sequence> 
            <xs:element name="value1" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value2" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value3" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value4" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value5" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value6" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value7" type="type-typedValue" maxOccurs="unbounded"/>
            <xs:element name="value8" type="type-typedValue" maxOccurs="unbounded"/>
        </xs:sequence> 
        <xs:attribute  name="structureType" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="type-typedValue">
        <xs:simpleContent>
            <xs:extension base="xs:decimal">
                <xs:attribute name="dataType" type="xs:string" use="required"/> 
                <xs:attribute name="dataUnit" type="xs:string" use="required"/> 
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="content-marketQuotes">
        <xs:sequence>
            <xs:element name="msg:standardIdentifier" type="type-msg.identificationCode"/>
            <xs:element name="msg:knownIdentifiers" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="msg:identifier" type="type-msg.identificationCode" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="msg:extendedCFICode" type="type-scheme"/>
            <xs:element name="msg:observation" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence> 
                        <xs:element name="md:source" type="xs:string"/>
                        <xs:element name="md:market" type="type-scheme"/>
                        <xs:element name="md:country" type="type-scheme"/>
                        <xs:element name="md:currency" type="type-scheme"/>
                        <xs:element name="md:pointLabel" type="xs:string"/>
                        <xs:element name="md:date" type="xs:date"/>
                        <xs:element name="md:endDate" type="type-dates_openEnded"/>
                        <xs:element name="md:dataPoint" type="type-dataPoint"/>
                    </xs:sequence>
                    <xs:attribute name="quoteType" type="xs:string" use="required"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="msg:observationCount" type="xs:decimal"/>
        </xs:sequence>
        <xs:attribute name="xsi:type" type="xs:string" use="required"/>
    </xs:complexType>

</xs:schema>

在这一行 --> xs:element name="msg:market" type="type-scheme" 我得到了错误!谁能帮忙?

【问题讨论】:

(1) 到目前为止,您共享了您的 XSD。您尝试针对该 XSD 验证的 XML 在哪里? (2) 您的 XSD 使用 msg 命名空间前缀而没有声明。这就是 XSD 为“无效”的原因。 我添加了缺失的部分但我仍然有同样的问题 【参考方案1】:

我看到另一个错误:我的架构处理器告诉我name="msg:messageId" 无效。您自始至终都使用了这个结构,所以我看到了很多错误,这可能掩盖了您的处理器给您的错误。

XSD 中的 name 属性始终是不合格的本地名称;当您声明组件时,它们会隐式进入架构文档的 targetNamespace,或者(如果 form="unqualified")没有命名空间。

【讨论】:

以上是关于XSD 架构错误:XmlSchema 错误:元素 http://www.w3.org/2001/XMLSchema:element 在此上下文中无效的主要内容,如果未能解决你的问题,请参考以下文章

如何根据属性值确定XML元素的子元素

xml 架构验证错误“未绑定前缀”

如何使用 Java 和 XmlSchema Core 解析 XSD 并读取所有复杂元素及其子元素

XSD 属性 NILLABLE 不起作用

XSD.exe 并创建对父元素的引用。

xml的schema的错误