Xsd 将一个模式中的HTML和XML组合在一起,所有这些都嵌套在另一个模式的元素中
过去几年来,我一直在断断续续地学习XML模式。我对基本知识有很好的掌握,但有一件事我仍然无法理解: 我希望能够创建类似以下内容的XML文档:Xsd 将一个模式中的HTML和XML组合在一起,所有这些都嵌套在另一个模式的元素中,xsd,Xsd,过去几年来,我一直在断断续续地学习XML模式。我对基本知识有很好的掌握,但有一件事我仍然无法理解: 我希望能够创建类似以下内容的XML文档: <itemList xmlns="http://mydomain.com/namespaceA"> <item> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:nsB="http://mydomain.com/name
<itemList xmlns="http://mydomain.com/namespaceA">
<item>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:nsB="http://mydomain.com/namespaceB">
<body>
<p>Any HTML code here but I want to be able to mark up
<nsB:myBTag><strong>some</strong> of the text</nsB:myBTag>
with tags from namespaceB even if those tags are nested within
standard HTML tags and even if there are then more HTML tags
nested within my namespaceB tags.</p>
</body>
</html>
</item>
</itemList>
任何HTML代码在这里,但我想能够标记
文本的某些部分
使用namespaceB中的标记,即使这些标记嵌套在
标准HTML标记,即使有更多的HTML标记
嵌套在我的命名空间B标记中
请注意,在
元素中,xhtml名称空间是默认名称空间。这是因为我希望文档作者能够使用标准的HTML编辑器,然后在需要的地方简单地插入特殊的namespaceB标记。在任何一个实例文档中,XHTML标记将远远多于namespaceB标记
因此,从目前为止我初步了解的情况来看,我认为我的两个模式需要如下所示:
名称空间
(我认为我需要为
标记中的内容模型声明的唯一名称空间是XHTML名称空间,因为实例文档中的
标记声明了名称空间B名称空间,但我决不是肯定的。)
名称空间B
最大的问题是:我需要做些什么来确保XHTML和namespaceB标记可以自由混合,还是这只是
标记操作的一部分
当然,我的模式和文档要比这复杂得多。为了便于讨论,我把它们简化了。提前感谢您提供的任何帮助。如果我能克服这一障碍,我就能创建一个真正强大的教育内容系统,帮助全世界免费接受教育。根据,
元素可以有一个名称空间
属性,该属性可以有值-这意味着文档中相应的元素可以有任何名称空间
namespace
属性的缺失具有相同的效果-因此您可以忽略它。i、 e.“大问题”的答案是:
- 我需要做些什么来确保XHTML和namespaceB标记可以自由混合使用吗?不,你没有
- 或者这只是标签操作的一部分?是的
免责声明:我没有测试过这个,只是阅读了上面的规范。如果我是你,我会尝试使用上面简化的XSD验证一些示例XML文档,使用流行的XSD验证器来确定它在什么条件下进行验证。谢谢,13ren。不幸的是,
将允许已知和未知宇宙中的任何和所有标记。非常重要的一点是,实例文档在被声明元素的内容模型中只有XHTML内容。好的,实际上,在已知和未知范围内的任何模式文档中都有任何和所有全局的、命名的标记。但是你明白了,我遇到了一个例子,Priscilla Walmsley(第85页)在“定义XML模式”中使用RDDL,它在HTML文档中有一个RDDL元素,在RDDL元素中有更多的HTML。因此,我将看一看RDDL的模式,看看他们是如何做到的。不幸的是,RDDL通过一个非常复杂的DTD扩展了XHTML标准本身的一个子集,并且声明的实体似乎比使用的实体多()。不幸的是,这意味着如果修改了XHTML,或者当HTML5被充分使用时,RDDL DTD必须被修改。或者仅仅接受XHTML或HTML5的有限子集作为rddl:resource元素中的有效内容。所以,这对我不起作用。回到绘图板,在研究RDDL时,我发现了W3C关于XHTML模块化的建议()。这显然提供了一种通过编写我自己的模块(如附录a所述)来扩展整个或部分XHTML模式的方法。这似乎是上述混合XHTML和namespaceB标签的“大问题”的一个可能(如果很难实现的话)解决方案。在第3.1.2节和第3.2节中的W3C关于XHTML本身的建议()中可以找到一个额外的、更容易在模式中实现的解决方案。本质上,“用户代理”(处理XHTML文档的程序,即web浏览器或我的教育内容显示系统)只是为了允许混合发生而没有抱怨。标准的web浏览器可以忽略我的额外标记,但必须处理其中的XHTML标记。因此,JavaScript、浏览器插件或我的自定义应用程序可以适当地处理我的标记。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:nsA="http://mydomain.com/namespaceA"
targetNamespace="http://mydomain.com/namespaceA">
<xs:element name="itemList">
<xs:complexType>
<xs:sequence>
<xs:element name="item" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:any namespace="http://www.w3.org/1999/xhtml"
minOccurs="1" maxOccurs="1"
processContents="strict">
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:nsB="http://mydomain.com/namespaceB"
targetNamespace="http://mydomain.com/namespaceB">
<xs:element name="myBTag">
<!-- I am clueless here -->
<!-- I have no idea how to make sure that additional HTML tags
can go in here without screwing everything up -->
</xs:element>
</xs:schema>