Xsd 自反模式验证&;定义

Xsd 自反模式验证&;定义,xsd,Xsd,有人能帮我定义一个xsd吗 我还希望在模式级别强制验证,以便基于给定的属性值,只显示相应的子标记(基于属性值的自反) 使用XSD是不可能的。检查是否可以使用。如果我将您的示例XML作为近似值,那么严格地说,有一种方法可以实现您想要的效果:它被称为。我个人不喜欢XSI:类型,所以我认为这个答案更像是一个学术练习。 如果您同意此XML: <?xml version="1.0" encoding="UTF-8"?> <root xmlns:xsi="http://www.w3.o

有人能帮我定义一个xsd吗

我还希望在模式级别强制验证,以便基于给定的属性值,只显示相应的子标记(基于属性值的自反)



使用XSD是不可能的。检查是否可以使用。

如果我将您的示例XML作为近似值,那么严格地说,有一种方法可以实现您想要的效果:它被称为。我个人不喜欢XSI:类型,所以我认为这个答案更像是一个学术练习。 如果您同意此XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <sample-tag xsi:type="one"> 
        <one></one> 
    </sample-tag> 
    <sample-tag xsi:type="two"> 
        <two></two> 
    </sample-tag> 
    <sample-tag xsi:type="three"> 
        <three></three> 
    </sample-tag> 
    <sample-tag xsi:type="onetwo"> 
        <one></one> 
        <two></two> 
    </sample-tag> 
</root> 

。。。那么这个XSD将为您提供您想要的:

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" name="sample-tag" type="sample-tag"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="sample-tag" abstract="true"/>
    <xsd:complexType name="one">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="one"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="two">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="two"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="three">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="three"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="onetwo">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="one"/>
                    <xsd:element name="two"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>

如果xsi:type是毫无疑问的,而xsd1.1则必须使用@Pangea的答案

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="root">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" name="sample-tag" type="sample-tag"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:complexType name="sample-tag" abstract="true"/>
    <xsd:complexType name="one">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="one"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="two">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="two"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="three">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="three"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="onetwo">
        <xsd:complexContent>
            <xsd:extension base="sample-tag">
                <xsd:sequence>
                    <xsd:element name="one"/>
                    <xsd:element name="two"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>