RelaxNG:列表模式不能包含元素模式(list // ref)

时间:2017-12-02 14:46:15

标签: xml relaxng

我正在尝试在relaxNG中列出不同的出版物(书籍,文章,集合),但是当我尝试使用list标签时,它会出错:

<?xml version="1.0" encoding="UTF-8"?>
<grammar
    xmlns="http://relaxng.org/ns/structure/1.0"
    xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">  

  <start>
    <element name="publications">
      <oneOrMore>
        <interleave>
          <list>
            <choice>
              <element name="article">
                <element name="publication_name">
                  <text/>
                </element>
                <element name="authors">
                  <text/>
                </element>
                <element name="publisher">
                  <text/>
                </element>
                <element name="volume">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="number">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="pages">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="citation">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="year">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
              </element>
              <element name="book">
                <element name="publication_name">
                  <text/>
                </element>
                <element name="authors">
                  <text/>
                </element>

                <element name="publisher">
                  <text/>
                </element>
                <element name="citation">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="year">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
              </element>
              <element name="chapter">
                <element name="publication_name">
                  <text/>
                </element>
                <element name="authors">
                  <text/>
                </element>
                <element name="collection_name">
                  <text/>
                </element>
                <element name="editors">
                  <text/>
                </element>
                <element name="citation">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
                <element name="year">
                  <data
                      datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
                      type="int"/>
                </element>
              </element>
            </choice>                       
          </list>
        </interleave>
      </oneOrMore>
    </element>
  </start>
</grammar>

我希望能够将出版物分为三类。

我得到的错误是:

  

列表模式不得包含元素模式(第7.1节)   RELAX NG规范要求简化XML形式   schema不包含与路径列表匹配的任何元素// ref)

1 个答案:

答案 0 :(得分:1)

请参阅RelaxNG Specification中的规则4.19。它通过引用将元素替换为新创建的定义,但禁止var(如错误所示,请参阅前面提到的规范中的7.1)。