使用xsd

时间:2016-08-04 09:45:50

标签: xml validation xsd

我对xsd很新。我也在Q& A上发现了很多问题,但非能够解决我的问题。我有一个html文件,我想使用xsd验证进行验证。我使用的标准是http://www.ihe.net/uploadedFiles/Documents/Radiology/IHE_RAD_Suppl_MRRT.pdf。它说html文件的格式化方式,应该可以使用任何xml验证器验证它。请注意这个问题XSD for same tag different attribute names,有点接近,但不是我想要的。这是我要验证的HTML的部分

<!DOCTYPE html>
<html>
<head>
    <tittle>Hello World</title>
    <meta charset="UTF-8"/>
    <meta name="d1" content="c1"/>
    <meta name="d2" content="c2"/>
</head>
</html>

标准规定,必须有1个带有属性字符集的元标记,以及带有属性名称和内容的零个或多个元标记。所以我试着制作以下xsd文件。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="html">
        <xs:complextType>
            <xs:sequence>
                <xs:element name="title" type="xs:string"/>
                <xs:element name="meta">
                    <xs:complexType>
                        <xs:attribute name="charset" type="xs:string"/>
                    </xs:complexType>
                </xs:element>
                <!-- obviously this wouldn't work -->
                <xs:element name="meta" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:attribute name="name" type="xs:string"/>
                        <xs:attribute name="content" type="xs:string"/>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

显然,由于重复元元素,上面的模式将无法工作。我得到一个mutliple元素错误。所以我试图在下面的组元素中说唱其他元标记,但即使这样也行不通。                                                                                                                                                                                                                                                           

    <xs:group name="otherMetatags">
        <xs:element name="meta" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
                <xs:attribute name="name" type="xs:string"/>
                <xs:attribute name="content" type="xs:string"/>
            </xs:complexType>
        </xs:element>
    </xs:group>
</xs:schema>

我知道我的两种方法似乎很愚蠢,但就像我之前说过的那样,对xsd来说是新手。

1 个答案:

答案 0 :(得分:0)

在XSD 1.0中,您无法表达一系列meta属性中只有一个必须具有charset属性的约束。

在XSD 1.1中,您可以使用断言来完成此操作。有关示例,请参阅XSD: Restrict only one child element to have specific value