我试图允许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创建周围的html或body标记。
如何将标签包含在我的XSD中?
答案 0 :(得分:8)
如果您想在XML中使用自定义元素以及HTML标记(即元素),则它们应该是 XHTML 元素。
当然,你可以定义一些你自己的HTML标签,但这看起来很像HTML,因为只有你才会知道这是'HTML'。 (此外,您必须根据需要定义HTML的所有元素,这将构成非常重要的架构!)
为了让每个人都知道您确实使用HTML元素,它们必须属于 XHTML命名空间:
http://www.w3.org/1999/xhtml
该命名空间由W3C定义和控制。因此,您只需将XHTML名称空间导入到模式中,而不是定义自己的名称, 这意味着导入XHTML的架构。 此网址可找到XHTML的架构: 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>
答案 1 :(得分:2)
我用Google搜索xhtml xsd并在w3c上找到XHTML 1.0 in XML Schema。有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>
答案 2 :(得分:0)
我想使用XHTML 1.1。
以下是基于ColdFusion's answer,the XHTML 1.1 XSD和this answer执行此操作的架构。
<?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>