4

我试图允许 Html 标签作为我的一种类型的孩子。

<xs:complexType name="Html">
    <xs:sequence>
        <!-- Attempting to allow us to include necessary HTML right into our XML -->
        <xs:any minOccurs="0" namespace="http://www.w3.org/1999/xhtml"></xs:any>
    </xs:sequence>
</xs:complexType>

<xs:element name="Html" type="Html"></xs:element>

目的是允许在该类型的任何元素内使用 Html 标记,但不一定需要围绕 html 或 body 标记以形成格式良好的 html。

如何将标签包含到我的 XSD 中?

4

3 回答 3

10

如果您想在您的 XML 和您的自定义元素中使用 HTML 标记(即元素),它们应该是XHTML元素。

当然,您可以定义一些您自己的 HTML 标记,但这将与 HTML 非常相似,因为只有您会知道这是“HTML”。(此外,您必须根据需要定义 HTML 的所有元素,这将构成相当大的架构!)

为了让大家知道您确实使用了 HTML 元素,它们必须属于XHTML 命名空间

http://www.w3.org/1999/xhtml

并且该命名空间由 W3C 定义和控制。因此,与其定义您自己的东西,不如将 XHTML 名称空间导入您的模式,这意味着导入 XHTML 的模式。XHTML 的模式可通过以下 URL 找到:http ://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd

因此,您的初始 XSD 我将重写如下:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <!-- Importing XHTML namespace -->
  <xs:import namespace="http://www.w3.org/1999/xhtml"
      schemaLocation="http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>

  <!-- 
    Here, you define your 'Html' type the same as they define
    the content of <body> element.

    Notice that 'xhtml' namespace prefix must be used with each reference
    to a W3C XHTML component.
  -->
  <xs:complexType name="Html">
    <xs:complexContent>
      <xs:extension base="xhtml:Block">
        <xs:attributeGroup ref="xhtml:attrs"/>
        <xs:attribute name="onload" type="xhtml:Script"/>
        <xs:attribute name="onunload" type="xhtml:Script"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <!-- Now, your custom 'Html' element has the same content model
       as the standard XHTML <body> element! -->
  <xs:element name="Html" type="Html"></xs:element>

</xs:schema>
于 2013-06-09T22:08:45.810 回答
2

我搜索了 xhtml xsd 并在 w3c的 XML Schema 中找到了 XHTML 1.0 。xhtml1-strict.xsd链接。如果你调查一下,你会发现 body 标签的定义。您可以将其用作 html 标记的基础:

<xs:element name="body">
  <xs:complexType>
    <xs:complexContent>
      <xs:extension base="Block">
         <xs:attributeGroup ref="attrs" />
         <xs:attribute name="onload" type="Script" />
         <xs:attribute name="onunload" type="Script" />
       </xs:extension>
     </xs:complexContent>
  </xs:complexType>
</xs:element>
于 2013-06-09T18:53:29.683 回答
0

我想使用 XHTML 1.1。

这是一个基于ColdFusion 的回答XHTML 1.1 XSD这个回答的模式。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/NewXMLSchema"
    xmlns:tns="http://www.example.org/NewXMLSchema"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    elementFormDefault="qualified">

    <!-- Importing XHTML 1.1 namespace -->
    <import namespace="http://www.w3.org/1999/xhtml"
            schemaLocation="http://www.w3.org/MarkUp/Schema/xhtml11.xsd"/>

    <!--
        Define the xhtml type.
        I didn't want forms in my special xhtml-like element.
    -->
    <xs:complexType name="xhtml">
        <xs:group ref="xhtml:xhtml.BlkNoForm.mix"/>
    </xs:complexType>

    <!-- Defining a type that matches the xhtml <body> element. -->
    <xs:complexType name="xhtml2">
        <xs:complexContent>
          <xs:extension base="xhtml:xhtml.body.type"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:element name="my-xhtml-element" type="tns:xhtml"></xs:element>
</schema>
于 2018-01-18T16:44:28.440 回答