XSD 基本复杂类型
XSD Base complexType
我想配置一个具有具体 children 的基本类型。
这种类型可以通过配置一个只允许一个child的元素来使用。
<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 等等)。
我该怎么做?
据我所见,你已经在那里了,只是 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>
我想配置一个具有具体 children 的基本类型。 这种类型可以通过配置一个只允许一个child的元素来使用。
<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 等等)。 我该怎么做?
据我所见,你已经在那里了,只是 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>