过去几年来,我一直在努力学习XML Schema。我对基础知识有很好的处理,但还有一件事我不知道:
我希望能够创建类似于以下内容的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>
元素内部,xhtml命名空间是默认命名空间。这是因为我希望文档作者能够使用标准的HTML编辑器,然后只需在他们需要的地方插入特殊的namespaceB标记。在任何一个实例文档中,将有比命名空间B标记更多的XHTML标记。
所以,从我到目前为止暂时学到的内容来看,我认为我的两个模式需要看起来像这样:
<?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>
(我认为我需要为<item>
标记中的内容模型声明的唯一命名空间是XHTML命名空间,因为实例文档中的<html>
标记声明了namespaceB命名空间,但我是绝不是积极的。)
<?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>
最大的问题是:我是否需要做任何事情来确保XHTML和namespaceB标记可以自由混合,或者只是<xs:any>
标记操作的一部分和部分?
当然,我的模式和文档将比这复杂得多。我简化了它们以便于讨论。提前感谢您提供的任何帮助。如果我能克服这个障碍,我可以创建一个非常强大的教育内容系统,帮助教育全世界免费。