一些公司“抛弃”带有冗长冗长的标签描述的 XML,但从未做出任何努力来正式描述这种混乱的结构。 因此,我尝试根据这样的描述构建 DTD。
有一件事是
0
和 1
用于多个标签的布尔值,所以我尝试将 ("0" | "1" )
定义为“参数实体”,但因各种语法错误而失败。
我最后的尝试是:
<!-- Boolean -->
<!ENTITY _false "0">
<!ENTITY _true "1">
<!ENTITY % BOOL "(&_false; | &_true;)">
<!-- Error -->
<!ELEMENT Error %BOOL;>
xmllint
抛出这样的错误:
Entity: line 1: parser error : ContentDecl : Name or '(' expected
%BOOL;
^
Entity: line 1:
(&_false; | &_true;)
^
Entity: line 1: parser error : expected '>'
%BOOL;
^
是否可以为此使用参数实体? 我试图搜索示例,但未能找到一些。 而且我的DTD实践经验也相当少。
实验我尝试了这个:
<!-- Boolean -->
<!ENTITY % BOOL '"0" | "1"'>
<!-- Error -->
<!ELEMENT Error (%BOOL;)>
然后
xmllint
抛出这样的错误:
Entity: line 1: parser error : ContentDecl : Name or '(' expected
%BOOL;
^
Entity: line 1:
"0" | "1"
^
Entity: line 1: parser error : expected '>'
%BOOL;
^
Entity: line 1:
"0" | "1"
^
Entity: line 1: parser error : Content error in the external subset
%BOOL;
^
Entity: line 1:
"0" | "1"
^
DTD 不能约束文本节点的内容,只能约束属性节点的内容。
对于您正在尝试的内容,您应该使用更强大的模式技术,例如 XML 模式定义 (XSD)、REgular LANguage for XML Next Generation (RelaxNG) 或 Schematron。