使用xmerl编译w3c架构时出错

时间:2012-12-09 03:25:08

标签: erlang dtd

我试图在我的Ubuntu桌面上运行XForms。没有 目前似乎在XForms上有很多活动,而我正试图这样做 让Backplanejs运行。它没有用,并且在检查javascript时 我发现它依赖于Microsoft库和activex。

我决定继续我的erlang教育,而不是学习javascript 而是与xmerl挣扎。我创建了一个模式目录 索引文件。该目录的内容是:

tony@blessing:~/workspace/myXformProject$ ls schemas
SchemaList.txt   XForms-Schema.xsd  xhtml-lat1.ent     xml-events.xsd
SchemaList.txt~  xhtml1-strict.dtd  xhtml-special.ent

这些架构已从w3c下载。但是这些架构会 不编译产生错误wfc_PEs_In_Internal_Subset。我会 期望这些完善的w3c模式可以用xmerl编译。

我做错了什么?

托尼华莱士

6> B.
[{"http://www.w3.org/1999/xhtml",
  "schemas/xhtml1-strict.dtd"},
 {"http://www.w3.org/2001/xml-events",
  "schemas/xml-events.xsd"},
 {"http://www.w3.org/2002/xforms",
 "schemas/XForms-Schema.xsd"}]

9> {ok,S1} = xmerl_xsd:process_schemas(B).          
3450- fatal: {error,{wfc_PEs_In_Internal_Subset}}
** exception exit: {fatal,{{error,{wfc_PEs_In_Internal_Subset}},
                       {file,"schemas/xhtml1-strict.dtd"},
                       {line,628},
                       {col,89}}}
 in function  xmerl_scan:fatal/2
 in call from xmerl_scan:scan_entity/2
 in call from xmerl_scan:scan_markup_decl/2
 in call from xmerl_scan:scan_ext_subset/2
 in call from xmerl_scan:scan_document/2
 in call from xmerl_scan:file/2
 in call from xmerl_xsd:process_schemas/2

3450引用xmerl_scan中的代码行:

scan_entity_value("%" ++ _T,S=#xmerl_scanner{environment=prolog},_,_,_,_,_) ->
    ?fatal({error,{wfc_PEs_In_Internal_Subset}},S);

该错误似乎与xhtml1-strict.dtd的第628行相关联 89列似乎可疑,因为628行并不宽:

621 <!--
622   param is used to supply a named property value.
623   In XML it would seem natural to follow RDF and support an
624   abbreviated syntax where the param elements are replaced
625   by attribute value pairs on the object start tag.
626 -->
627 <!ELEMENT param EMPTY>
628 <!ATTLIST param
629   id          ID             #IMPLIED
630   name        CDATA          #IMPLIED
631   value       CDATA          #IMPLIED
632   valuetype   (data|ref|object) "data"
633   type        %ContentType;  #IMPLIED
634   >
635 

如果你有这么远的帖子,非常感谢! 贝

1 个答案:

答案 0 :(得分:0)

您似乎在一组架构文档上调用xmerl_xsd:process_schemas,其中一些是XSD架构文档,其中一个根本不是XSD架构文档,而是一个文档类型定义文件(xhtml1-strict.dtd) 。 process_schemas函数需要XSD架构文档,它们是XML文档实例,但DTD文件不是XML文档实例。如果要执行您想要执行的操作,则需要获取XHTML的XSD架构,而不是DTD。不幸的是,XHTML WG的XSD架构文档并不是世界上最容易使用的东西;祝你好运。

如果您想使用XForms,您可能会发现使用XSLTForms或Orbeon或BetterForms或EMC Formula比使backplane.js工作更容易。