如果您想允许一组特定的 XHTML 元素作为 itemDescription 的子元素,您需要做的是通过定义适当的复杂类型来指定它们是哪些子元素。(如果您的模式是 XSD,那么您还需要更正现有元素声明中的语法错误。)从您提到的特定 XHTML 元素中,我猜您还希望允许 idemDescription 包含字符数据。
完成这项工作的 itemDescription 声明如下所示:
<xsd:element name="itemDescription">
<xsd:complexType mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="xhtml:ul"/>
<xsd:element ref="xhtml:b"/>
<xsd:element ref="xhtml:i"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
由于您需要引用 XHTML 名称空间中的特定项,因此您也需要导入它。最简单的方法是使用如下所示的导入:
<xsd:import namespace="http://www.w3.org/1999/xhtml"/>
但是在某些时候,您需要将 XSD 验证器指向 XHTML 的模式文档;有些人更喜欢在 import 语句上而不是在调用时这样做,所以他们在 import 语句上指定了 schemaLocation 属性:
<xsd:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="..."/>
这里的“...”需要被一个指向你想要使用的 XHTML 模式的指针替换。(建议使用本地副本,因为W3C 使得从他们的站点检索模式文档的速度非常慢,以此来阻止过多的 DTD 和模式流量。)
既然您说您是 XML 新手,那么拥有一个包含所有内容的完整模式文档可能会有所帮助。同样,如果您想在实践中使用它,请记住用 URI 替换 schemaLocation 值。
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="..."/>
<xsd:element name="itemDescription">
<xsd:complexType mixed="true">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="xhtml:ul"/>
<xsd:element ref="xhtml:b"/>
<xsd:element ref="xhtml:i"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>