我对XML Schema类型有疑问。
类型必须是:
文本,允许嵌入式HTML格式化
我应该怎么做才能做到这一点? (允许嵌入式HTML格式化?我认为文本xsd:string例如可以,但我不知道如何允许嵌入式HTML格式化)
在这种情况下我应该包括什么?
答案 0 :(得分:2)
我认为xsd:string是个不错的选择。它允许你像这样在CDATA中嵌入html。
<xsd:element name="embedded_html" type="xsd:string"/>
<embedded_html><![CDATA[<p>This is silly HTML</p>]]></embedded_html>
但是你根本没有得到任何类型的验证,任何字符串都可以。
您可以做的另一件事就是使用为xhtml http://www.w3.org/TR/xhtml1-schema/#schemas提供的模式。但这实际上取决于你想要做什么。
答案 1 :(得分:1)
xs:string
数据类型实际上不适合散布有标记的字符数据;这就是mixed="true"
的复杂类型。
如果您正在为文档类型编写XSD架构并希望特定元素能够包含任意XHTML元素,则声明它的正确方法是这样的:
<xs:element name="embedded_html">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any namespace="http://www.w3.org/1999/xhtml"
minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这不允许HTML包含标签沙拉; HTML需要很好地形成(即编码为XHTML)。如果由于某种原因你认为你需要允许标签沙拉作为embedded_html
的内容,那么你的选择是重新考虑你实际需要或做的事情,就像其他一些词汇一样,并且逃避HTML编码。但即使在这种情况下,我认为使用混合内容比xs:string
更好。
答案 2 :(得分:0)
模式的目的是控制文档的逻辑结构,而不是选择字符数据的转义约定。
您只需在文档XML中添加CDATA
部分,而无需修改XSD。