xml中html标记的子集

时间:2013-02-19 14:29:11

标签: html xml tags xsd

我是xml和html的新手,我有一个问题:)

在以下xml中:

<element name="itemDescription"> 
    <any minOccurs="0"/>            
</element>

“itemDescription”标记如何能够支持仅使用ul,li,b,i和span标记的HTML子集? 目前,它被定义为接受任何XML。

我在这个上搜索了很多 - 但我无法想出一个解决方案。只有我可以使用complexTypes。

有人能帮助我吗? :)

THX

2 个答案:

答案 0 :(得分:0)

请记住,除了类似的语法之外,HTML与XML几乎没什么关系。

您可以查看schema of XHTML并复制出您需要的部分,但自己实施它们可能会更容易。

在任何情况下,恕我直言,尝试在XML应用程序中重新实现(X)HTML并不是一个好主意。

可能更容易
  • 实现类似于HTML的内容,让读取XML的应用程序将其转换为HTML
  • 将您的HTML存储为(CDATA)字符串
  • 不要使用HTML,例如lightweight markup language

答案 1 :(得分:0)

如果要允许一组特定的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 makes it excruciatingly slow to retrieve schema documents from their site是一种尝试阻止过多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>