【问题标题】:XSD Base complexTypeXSD 基础复杂类型
【发布时间】:2015-01-28 10:46:05
【问题描述】:

我想配置一个具有具体子级的基本类型。 可以通过配置一个只允许一个子元素的元素来使用这种类型。

<xs:complexType name="VcsType">
    <xs:sequence>
        <xs:element name="enabled" type="xs:boolean" default="false" minOccurs="1"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="GitVcsType">
    <xs:complexContent>
        <xs:extension base="VcsType">
            <xs:sequence>
                <xs:element name="url" type="xs:string" minOccurs="1"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="SvnVcsType">
    <xs:complexContent>
        <xs:extension base="VcsType">
            <xs:sequence>
                <xs:element name="version" type="xs:string" minOccurs="1"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

现在我只想说:

<xs:element name="vcs" type="VcsType" minOccurs="0"/>

无论在哪里,它都会被相应地替换(如果是 git/svn 等)。 我该怎么做?

【问题讨论】:

    标签: xsd


    【解决方案1】:

    据我所知,您已经在那里,它只是缺少的东西的 XML 方面。

    你有一个架构

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- Created with Liquid XML 2015 Designer Edition (Trial) 13.0.1.5719 (http://www.liquid-technologies.com) -->
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="vcs" type="VcsType" />
        <xs:complexType name="VcsType">
            <xs:sequence>
                <xs:element name="enabled" type="xs:boolean" minOccurs="1" default="false" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="GitVcsType">
            <xs:complexContent>
                <xs:extension base="VcsType">
                    <xs:sequence>
                        <xs:element name="url" type="xs:string" minOccurs="1" />
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
        <xs:complexType name="SvnVcsType">
            <xs:complexContent>
                <xs:extension base="VcsType">
                    <xs:sequence>
                        <xs:element name="version" type="xs:string" minOccurs="1" />
                    </xs:sequence>
                </xs:extension>
            </xs:complexContent>
        </xs:complexType>
    </xs:schema>
    

    由于您有 2 个源自 VscType 的东西,您可以创建基于 VscType 本身、GitVscType 或 SvnVscType 的文档。

    这会导致

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Created with Liquid XML 2015 Designer Edition (Trial) 13.0.1.5719 (http://www.liquid-technologies.com) -->
    <vcs>
        <enabled>true</enabled>
    </vcs>
    
    <?xml version="1.0" encoding="utf-8"?>
    <!-- Created with Liquid XML 2015 Designer Edition (Trial) 13.0.1.5719 (http://www.liquid-technologies.com) -->
    <vcs xsi:type="GitVcsType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <enabled>true</enabled>
        <url>string</url>
    </vcs>
    
    <?xml version="1.0" encoding="utf-8"?>
    <!-- Created with Liquid XML 2015 Designer Edition (Trial) 13.0.1.5719 (http://www.liquid-technologies.com) -->
    <vcs xsi:type="SvnVcsType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <enabled>true</enabled>
        <version>1.0.0.0</version>
    </vcs>
    

    【讨论】:

    • 感谢详细解答,我也想去掉type属性,可以吗?有什么可以替代的?
    • 如果您希望根元素始终是 vcs,那么您需要在 XML 中包含 xsi:type,以便解析器知道它处理的对象类型。如果可以为每种类型使用不同的根元素,那么您只需添加
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多