Erlang 使用xmerl编译w3c架构时出错

Erlang 使用xmerl编译w3c架构时出错,erlang,dtd,Erlang,Dtd,我试图让XForms在我的Ubuntu桌面上运行。没有 目前XForms上似乎有很多活动,我正试图 让背板运行。它不起作用,在检查javascript时 我发现它依赖于Microsoft库和activex 我没有学习javascript,而是决定继续我的erlang教育和 而是与xmerl斗争。我创建了一个带有 索引文件。此目录的内容是: tony@blessing:~/workspace/myXformProject$ ls schemas SchemaList.txt XForms-Sc

我试图让XForms在我的Ubuntu桌面上运行。没有 目前XForms上似乎有很多活动,我正试图 让背板运行。它不起作用,在检查javascript时 我发现它依赖于Microsoft库和activex

我没有学习javascript,而是决定继续我的erlang教育和 而是与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\U PEs\U。我会的 期望这些建立良好的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_entity_value("%" ++ _T,S=#xmerl_scanner{environment=prolog},_,_,_,_,_) ->
    ?fatal({error,{wfc_PEs_In_Internal_Subset}},S);
错误似乎与xhtml1-strict.dtd的第628行有关 由于第628行的宽度不太大,89列似乎有问题:

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 
621
627
628
635
如果你能做到这一点,非常感谢!
Tony

您似乎在一组模式文档上调用xmerl_xsd:process_模式,其中一些是xsd模式文档,其中一个根本不是xsd模式文档,而是文档类型定义文件(xhtml1 strict.dtd)。process_schemas函数需要XSD模式文档,它们是XML文档实例,但DTD文件不是XML文档实例。如果您想做您看起来想做的事情,您将需要为XHTML获取XSD模式,而不是DTD。不幸的是,XHTMLWG的XSD模式文档并不是世界上最容易使用的东西;祝你好运

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

错误指的是。它抱怨“参数实体引用”,在本例中为
%ContentType。如果我正确理解了规范,那么如果DTD作为它所描述的XML文档的一部分出现,那么这种引用是不允许的,但是当DTD位于单独的文件中时,这种引用是允许的。也许还有另一种调用xmerl的方法,这样它可以正确地处理这个问题。。。