【问题标题】:Allowing certain XHTML tags in an XML Schema?在 XML 模式中允许某些 XHTML 标记?
【发布时间】:2012-02-21 21:37:48
【问题描述】:

我正在为我的网站设计一个 XML 模式。架构中的元素之一称为“cmets”,它应该包含用户发布的 cmets。我不允许使用某些 xhtml 标记:b、i 和 u 用于样式设置。到目前为止,我所做的是导入 XHTML 命名空间,然后为我的 cmets 元素声明一个 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 模式位于同一文件夹中。

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    最简单的方法是对 cme​​ts 使用 &lt;[CDATA[ ... ]]&gt; 部分。我认为您在应用程序代码中验证标签,因此您不必再次在 XSD 中强制验证。

    编辑:

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

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

    我不认为,将实际标签作为 XML 包含在架构中是一个好方法,因为它只是任意内容(有效的 HTML 是什么,这是无效的 XML?例如 @987654323没有&lt;/p&gt; 的@ 是有效的HTML,但在XML 中无效)。

    要转义的 XML 特殊字符

    " & ' < >
    

    【讨论】:

    • 谢谢,但我正在寻找与 XML Schema 兼容的东西,而不是 DTD
    • 我调整了答案。我不认为将评论中的标签作为实际的 XML 包含在内不是一个好方法,而是作为转义的任意内容。
    【解决方案2】:

    您有语法错误; 不能有内容。您可能不得不使用(很可能)重复选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多