如何用xml架构重新定义xhtml body元素?

时间:2011-10-11 10:36:29

标签: xml xsd

这是我的第一个问题,已经回答:XML Schema - Is it possible to allow a certain element only once in the whole document?

现在我想重新定义xhtml的body元素并为其添加一个唯一约束。这是xhtml-struct-1.xsd

中的定义
 <xs:group
        name="xhtml.html.content">
        <xs:sequence>
            <xs:element
                name="head"
                type="xhtml.head.type"/>
            <xs:element
                name="body"
                type="xhtml.body.type"/>
        </xs:sequence>
    </xs:group>

在我redefine.xsd我尝试了这个:

<xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
  <xs:group name="xhtml.html.content">
    <xs:sequence>
      <xs:element name="head" type="xhtml.head.type" />
      <xs:element name="body" type="xhtml.body.type" >
                <xs:unique name="highlander">
                     <xs:selector xpath=".//mylang:content"/>
                     <xs:field xpath="."/>
                </xs:unique>
            </xs:element>
        </xs:sequence>
    </xs:group>
</xs:redefine>
  

org.xml.sax.SAXParseException;的systenId:   文件:XHTML的结构,1.xsd;   lineNumber:113; columnNumber:35; mg-props-correct.2:循环   检测到组':xhtml.html.content_fn3dktizrknc9pi'的定义。   递归地跟随粒子的{term}值导致a   {term}是组本身的粒子。

我狡猾了几十个其他变种,但我总是得到一些我不明白的奇怪错误。如何使用XML Schema重新定义xhtml body元素?

2 个答案:

答案 0 :(得分:0)

重新定义群组的工作方式不同。

<xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
  <xs:group name="xhtml.html.content">
    <xs:sequence>
      <xs:group ref="xhtml.html.content">
      ... additional elements/group to be in this sequence defined here ...
    </xs:sequence>
  </xs:group>
</xs:redefine>

看起来你想重新定义类型“xhtml.body.type”,你应该尝试这样做而不是重新定义组“xhtml.html.content”。

也许这些片段有用:

http://www.datypic.com/books/defxmlschema/chapter18.html

答案 1 :(得分:0)

您是否尝试过不同的解析器/验证器?

关于我在W3C's XMLSchema Dev Mailing List上发布的类似问题,有一个私人响应(因此之前没有链接存档),告诉我响应者的测试运行不同的解析器,结果不同:libxml v20708和MSXML v20090415成功验证了Xerces-J 2.11和Saxon 9.2都存在XSD问题。