2012-07-24 63 views
3

好的。我想爲xmllint設置目錄文件來修復事件,以便從本地文檔驗證dcterms xml命名空間。我相信我所做的一切都是正確的,但它似乎並不奏效。如何爲xmllint設置目錄文件?

我正在運行OSX。

我創造我已經下載dcterms.xsd到該目錄

$ ls -l 
-rw-r--r-- 1 ibis wheel 12507 24 Jul 11:42 dcterms.xsd 

我創建了一個名爲文件目錄/ etc/XML

$ mkdir /etc/xml 
$ cd /etc/xml 

「目錄」

$ xmlcatalog --create > catalog 

我已將dcterms名稱空間添加到目錄文件

$ xmlcatalog --noout --add uri http://purl.org/dc/elements/1.1/ file:///etc/xml/dc.xsd 
$ xmlcatalog --noout --add uri http://purl.org/dc/terms/ file:///etc/xml/dcterms.xsd 
$ cat catalog 
<?xml version="1.0"?> 
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"> 
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> 
    <uri name="http://purl.org/dc/elements/1.1/" uri="file:///etc/xml/dc.xsd"/> 
    <uri name="http://purl.org/dc/terms/" uri="file:///etc/xml/dcterms.xsd"/> 
</catalog> 

在工作目錄中,我已經創建了一個名爲Empty.xsd

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Empty" xmlns:tns="http://www.example.org/Empty" elementFormDefault="qualified"> 
    <element name="empty"> 
    <complexType> 
     <sequence> 
     <any processContents="strict" minOccurs="0" maxOccurs="unbounded"/> 
     </sequence> 
     <anyAttribute></anyAttribute> 
    </complexType> 
    </element> 
</schema> 

注意,processcontnts是 「嚴」 一個簡單的XML模式。

我已經創建了一個XML文件,該文件應該觸發所有的驗證:

<?xml version="1.0" encoding="UTF-8"?> 
<empty xmlns="http://www.example.org/Empty" 
      xmlns:dcterms="http://purl.org/dc/terms/"> 
    <dcterms:title>A title</dcterms:title> 
</empty> 

然後我嘗試驗證它。

$ xmllint --noout --valid --schema Empty.xsd Empty.xml 
Empty.xml:2: validity error : Validation failed: no DTD found ! 
y xmlns="http://www.example.org/Empty" xmlns:dcterms="http://purl.org/dc/terms/" 
                      ^
Empty.xml:3: element title: Schemas validity error : Element '{http://purl.org/dc/terms/}title': No matching global element declaration available, but demanded by the strict wildcard. 
Empty.xml fails to validate 

我已經建立了一個文檔中指定的目錄,並將它指向本地的dcterms模式文件。爲什麼xmllint無法找到它?

回答

1
  1. 我沒有在dctermstitle元素,所以我abstract
  2. 取代它,我無法找到任何確認,但其他人也用目錄文件中的libxml XSD模式報告問題。儘管如此,我發現目錄可以正常工作。
  3. 有一種解決方法。將<import namespace="http://purl.org/dc/terms/" schemaLocation="dcterms.xsd" />插入Empty.xsd。之後,我擺脫了No matching global消息。
  4. No DTD found仍然可見,但返回碼從3增加到4,這意味着一種成功的解析。
  5. 編輯:--sax交換機似乎有助於「找不到DTD」消息。

相關問題:Xml validation with schema header and Catalog lookup,無人接聽。這是關於第2點。