0

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

在以下 xml 中:

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

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

我在这方面搜索了很多 - 但我无法提出解决方案。只有我可能可以使用 complexTypes。

有人能帮我吗?:)

谢谢

4

2 回答 2

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 使得从他们的站点检索模式文档的速度非常慢,以此来阻止过多的 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>
于 2013-02-19T16:47:56.857 回答
0

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

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

无论如何,恕我直言,尝试在 XML 应用程序中重新实现 (X)HTML 并不是一个好主意。这可能会更容易

  • 实现类似于 HTML 的内容,并让读取 XML 的应用程序将其转换为 HTML
  • 将您的 HTML 存储为 (CDATA) 字符串
  • 不要使用 HTML,而是使用轻量级标记语言
于 2013-02-19T15:00:51.907 回答