Xsd 将一个模式中的HTML和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

过去几年来,我一直在断断续续地学习XML模式。我对基本知识有很好的掌握,但有一件事我仍然无法理解:

我希望能够创建类似以下内容的XML文档:

  <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>