好.我想为xmllint设置目录文件以修复问题,以便从本地文档验证dcterms xml命名空间.我相信我已经做好了一切,但它似乎并没有起作用. 我正在运行OSX. 我创建了一个目录/ etc / xml $mkdir /etc/x
我正在运行OSX.
我创建了一个目录/ etc / xml
$mkdir /etc/xml $cd /etc/xml
我已将dcterms.xsd下载到该目录
$ls -l -rw-r--r-- 1 ibis wheel 12507 24 Jul 11:42 dcterms.xsd
我创建了一个名为“catalog”的文件
$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架构
<?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 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找不到它?
>我在dcterms中没有title元素,所以我用abstract替换了它>我找不到任何确认,但其他人也报告在libxml中使用xsd架构的目录文件时出现问题.我发现目录可以用于dtds.
>有一个解决方法.插入< import namespace =“http://purl.org/dc/terms/”schemaLocation =“dcterms.xsd”/>进入Empty.xsd.之后,我摆脱了没有匹配的全局消息.
>找不到DTD仍然可见,但返回码从3增加到4,这意味着成功解析.
>编辑:–sax开关似乎有助于“没有找到DTD”消息.
相关问题:Xml validation with schema header and Catalog lookup,没有答案.这是第2点.