2017-04-10 31 views
1

我很奇怪,爲什麼這個Docbook的5.0文檔是無效的:驗證的Docbook 5.0,鏈接/ LINKEND

<?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

也許這是您安裝的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

article - 一篇文章。

梗概

序列:

  • 之一:

    • 序列:

      • 交錯的:

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

    • info(db.titlereq。信息)

titleinfo有後缺乏一個?問號的,與合併的One of意味着一個或另一個的titleinfo是必需的。

我很驚訝XSD模式沒有捕捉到。但我想也許這是一個跡象表明,爲了確保您的DocBook文檔實際上是有效的,您可能需要考慮對RelaxNG模式(/usr/share/xml/docbook/schema/rng/5.0/docbook.rng文件)進行驗證。

+0

非常感謝。 'xmlstarlet --version'實際上打印出一個空行,但它是libxml 2.9.2和libxslt 1.1.28使用Ubuntu。 –

+0

奇怪。可以改爲libxml2版本中的錯誤,我猜 – sideshowbarker

+0

另外,Docbook權威指南中沒有提到「info」。 –