验证 Docbook 5.0,link/linkend
Validating Docbook 5.0, link/linkend
我想知道为什么这个 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 问题,因为其他工具可以愉快地处理这些文件。不管怎样,如果有人能解释这个问题,我会很高兴。
可能是您安装的 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
元素必须有一个 title
或 info
子元素:
$ 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:
article — An article.
Synopsis
Sequence of:
One of:
Sequence of:
Interleave of:
title
titleabbrev?
subtitle?
info?
(db.titleforbidden.info)
info
(db.titlereq.info)
那里title
和info
后面少了一个?
问号,加上One of
表示title
中的一个或另一个或 info
是必需的。
我很惊讶 XSD 模式没有捕捉到这一点。但我想这可能表明要确保您的 DocBook 文档确实有效,您可能需要考虑针对 RelaxNG 模式(/usr/share/xml/docbook/schema/rng/5.0/docbook.rng
文件)进行验证。
我想知道为什么这个 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 问题,因为其他工具可以愉快地处理这些文件。不管怎样,如果有人能解释这个问题,我会很高兴。
可能是您安装的 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
元素必须有一个 title
或 info
子元素:
$ 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:
article — An article.
Synopsis
Sequence of:
One of:
Sequence of:
Interleave of:
title
titleabbrev?
subtitle?
info?
(db.titleforbidden.info)
info
(db.titlereq.info)
那里title
和info
后面少了一个?
问号,加上One of
表示title
中的一个或另一个或 info
是必需的。
我很惊讶 XSD 模式没有捕捉到这一点。但我想这可能表明要确保您的 DocBook 文档确实有效,您可能需要考虑针对 RelaxNG 模式(/usr/share/xml/docbook/schema/rng/5.0/docbook.rng
文件)进行验证。