首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSD - <xs:sequence>不含<xs:complexType>?

XSD - <xs:sequence>不含<xs:complexType>?
EN

Stack Overflow用户
提问于 2015-10-14 09:32:30
回答 1查看 538关注 0票数 2

我有一个简单的XML数据,并希望使用我的XSD文件来验证它。我想以任何一种“面向对象”的方式创建XSD文件。因为至少在我看来,理解/阅读更好。

我的XML:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<DSExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="TestXSD.xsd">

    <Job Identifier="someString1">
        <Project name="someString2">
            <tag1 />
            <tag2 />
        </Project>
    </Job>

</DSExport>

我的XSD:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- "MAIN" -->
    <xs:element name="DSExport">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Job" type="JobType">

                    <!-- NOTE: SOMETHING WENT WRONG HERE -->
                    <xs:sequence>
                        <xs:element name="Project" type="ProjectType">
                            <xs:sequence>
                                <xs:element name="tag3"></xs:element>
                                <xs:element name="tag4"></xs:element>
                            </xs:sequence>
                        </xs:element>
                    </xs:sequence>
                    <!-- NOTE: SOMETHING WENT WRONG HERE -->

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

    <!--  "FUNCTIONS" (WANT TO SEPERATE THE SPECIALIZED VALIDATION OF ALL ELEMENTS)-->
    <xs:complexType name="JobType">
        <xs:attribute name="Identifier" type="xs:string" use="required" />
    </xs:complexType>

    <xs:complexType name="ProjectType">
        <xs:attribute name="name" type="xs:string" use="required" />
    </xs:complexType>

我用月食。我收到了这样的错误信息:

代码语言:javascript
复制
s4s-elt-must-match.1: The content of 'Job' must match (annotation?, (simpleType | complexType)?, (unique | 
 key | keyref)*)). A problem was found starting at: sequence.

我知道如何解决这个问题如果我把“主”部分的每个部分都写下来.但我如何像“面向对象”那样解决这个问题呢?我想分离每个元素的complexType定义!

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-14 09:42:47

您已经两次定义了“职务”和“项目”元素。应该将序列移动到类型定义,如下所示:

代码语言:javascript
复制
<xs:element name="DSExport">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Job" type="JobType"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:complexType name="JobType">
    <xs:sequence>
        <xs:element name="Project" type="ProjectType"/>
    </xs:sequence>
    <xs:attribute name="Identifier" type="xs:string" use="required" />
</xs:complexType>

<xs:complexType name="ProjectType">
    <xs:sequence>
        <xs:element name="tag3"></xs:element>
        <xs:element name="tag4"></xs:element>
    </xs:sequence>
    <xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>

另见:XSD element with both attributes and child elements

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

https://stackoverflow.com/questions/33121638

复制
相关文章

相似问题

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