验证Docbook 5.0,链接/链接

时间:2017-04-10 04:16:43

标签: docbook docbook-5

我想知道为什么这个Docbook 5.0文档无效:

<?xml version='1.0' encoding='utf-8'?>
<article xmlns='http://docbook.org/ns/docbook' xmlns:xlink='http://www.w3.org/1999/xlink' version='5.0'>
<section xml:id='H_0'>
<title>This is a title</title>
<para>
Blah <link linkend='H_0'>This is a link</link>blah blah blah.</para>
</section>
</article>

以下是我从xmlstarlet获得的信息:

$ xmlstarlet val --err --xsd /usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd test.xml
test.xml:3.22: Element '{http://docbook.org/ns/docbook}section', attribute '{http://www.w3.org/XML/1998/namespace}id': '' is not a valid value of the atomic type 'xs:ID'.
test.xml:6.25: Element '{http://docbook.org/ns/docbook}link', attribute 'linkend': '' is not a valid value of the atomic type 'xs:IDREF'.
test.xml - invalid

我只想要文档中的内部链接,以及各个部分。

补充:也许这是一个xmlstarlet问题,因为其他工具可以愉快地处理文件。无论如何,如果有人能够解释这个问题,我会很高兴。

1 个答案:

答案 0 :(得分:1)

也许这是您安装的xmlstarlet版本中的错误?它适用于Debian:

$ xmlstarlet val --err --xsd /usr/share/xml/docbook/schema/xsd/5.0/docbook.xsd -
<?xml version='1.0' encoding='utf-8'?>
<article xmlns='http://docbook.org/ns/docbook'
         xmlns:xlink='http://www.w3.org/1999/xlink' version='5.0'>
<section xml:id='H_0'>
<title>This is a title</title>
<para>
Blah <link linkend='H_0'>This is a link</link>blah blah blah.</para>
</section>
</article>
- - valid
    ^^^^^

这是我的xmlstarlet版本信息:

$ xmlstarlet --version
1.6.1
compiled against libxml2 2.9.4, linked with 20904
compiled against libxslt 1.1.29, linked with 10129

顺便说一下,问题中的DocBook文档实际上并不有效 - 因为DocBook article元素必须包含titleinfo子元素:

$ cat > test.xml
<?xml version='1.0' encoding='utf-8'?>
<article xmlns='http://docbook.org/ns/docbook'
         xmlns:xlink='http://www.w3.org/1999/xlink' version='5.0'>
<section xml:id='H_0'>
<title>This is a title</title>
<para>
Blah <link linkend='H_0'>This is a link</link>blah blah blah.</para>
</section>
</article>

$ java -jar /usr/share/java/jing.jar \
    /usr/share/xml/docbook/schema/rng/5.0/docbook.rng test.xml
test.xml:3:23: error: element "section" not allowed yet; expected element "info",
"subtitle", "title" or "titleabbrev"

请参阅http://tdg.docbook.org/tdg/5.0/article.html

  

文章 - 一篇文章。

     

<强>概要

     

序列:

     
      
  • 其中一个:

         
        
    • 序列:

           
          
      • 交错:

             
            
        • title
        •   
        • titleabbrev?
        •   
        • subtitle?
        •   
      •   
      • info?(db.titleforbidden.info)

      •   
    •   
    • info(db.titlereq.info)

    •   
  •   

?title之后缺少info问号,加上One of表示titleinfo中的一个或另一个{1}}是必需的。

我很惊讶XSD架构没有抓住它。但我想这可能是为了确保您的DocBook文档确实有效,您可能需要考虑验证RelaxNG架构(/usr/share/xml/docbook/schema/rng/5.0/docbook.rng文件)。