我对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来说是新手。
答案 0 :(得分:0)
在XSD 1.0中,您无法表达一系列meta
属性中只有一个必须具有charset
属性的约束。
在XSD 1.1中,您可以使用断言来完成此操作。有关示例,请参阅XSD: Restrict only one child element to have specific value。