在XML Schema中允许某些XHTML标记?

时间:2012-02-21 10:23:47

标签: xml xsd

我正在为我的网站设计一个XML Schema。模式中的一个元素称为“注释”,它应该包含从用户发布的注释。我不想允许使用某些xhtml标签: b i u 用于样式化。到目前为止,我所做的是导入XHTML命名空间,然后为我的comments元素声明一个complexType:

<import namespace="http://www.w3.org/1999/xhtml"
        schemaLocation="xhtml1-transitional.xsd" />

....

<element name="comments">
    <complexType mixed="true">
        <any minOccurs="0">
            <element ref="xhtml:u"/>
            <element ref="xhtml:b"/>
            <element ref="xhtml:i"/>
        </any>
    </complexType>
</element>

但这似乎不起作用!至少XML Schema不会通过IBM XML Schema Quality Checker进行验证。 xhtml1-transitional.xsd文件与XML Schema位于同一文件夹中。

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用<[CDATA[ ... ]]>部分进行评论。我认为您在应用程序代码中验证了标记,因此您不必再次在XSD中强制执行验证。

编辑:

由于您只想要一个XSD解决方案,我认为最简单的方法是将comments标记定义为字符串并转义html特殊字符:

<xsd:element name="comments" type="xsd:string" />

我不认为,在模式中将实际标记作为XML包含在内是一种好方法,因为它只是任意内容(有效HTML是什么,这是无效的XML?例如{{ 1}}没有<p>是有效的HTML,但在XML中无效。

要转义的XML特殊字符

</p>

答案 1 :(得分:1)

您有语法错误; &LT;任何/&GT;不能有内容。您可能不得不使用(最有可能)重复选择。