也许这是XML和DTD大师的一些任务?希望你能帮助我摆脱困境。
我的XML文件需要此DTD实体
<!-- testing -->
&test-commonTestingLibs;
或者
<!-- testing -->
&compile-commonTestingLibs;
我的DTD for对于 test - *
来说是这样的<!ENTITY test-commonTestingLibs "
<dependency org='org.dbunit' name='dbunit' rev='${lib.version.dbunit}' conf='test->default, sources, javadoc' />
<dependency org='org.testng' name='testng' rev='${lib.version.testng}' conf='test->default, sources, javadoc' />
" >
或编译 - *
<!ENTITY compile-commonTestingLibs "
<dependency org='org.dbunit' name='dbunit' rev='${lib.version.dbunit}' conf='compile->default, sources, javadoc' />
<dependency org='org.testng' name='testng' rev='${lib.version.testng}' conf='compile->default, sources, javadoc' />
" >
是否可以定义一个DTD,使相同的代码更可重复使用参数&#34; aParameter &#34;?
<!ENTITY commonTestingLibs-%%aParameter%% "
<dependency org='org.dbunit' name='dbunit' rev='${lib.version.dbunit}' conf='%%aParameter%%->default, sources, javadoc' />
<dependency org='org.testng' name='testng' rev='${lib.version.testng}' conf='%%aParameter%%->default, sources, javadoc' />
" >
所以我可以使用DTD中的aParameter或作为参数的XML进行实体定义?
这将有助于我消除多余的定义,这些定义通常不会像上面的例子那么短,差别只是一个简单的关键字&#34; aParameter &#34; (主要是:编译,测试,提供......)
答案 0 :(得分:0)
是的,您可以使用parameter entity来引用更改的小部分。它与您的建议非常相似,但您没有尝试更改实体名称,而是拥有一个通用实体,只有内部数据会发生变化。
<!-- Change this to "compile" when needed. -->
<!ENTITY % type "test">
<!-- Make this entity generic, so you don't have to change which reference you're using. -->
<!ENTITY commonTestingLibs "
<dependency org='org.dbunit' name='dbunit' rev='${lib.version.dbunit}' conf='%type;->default, sources, javadoc' />
<dependency org='org.testng' name='testng' rev='${lib.version.testng}' conf='%type;->default, sources, javadoc' />
">
我要做的是使用conditional (IGNORE/INCLUDE) sections更容易从“测试”切换到“编译”。通过这种方式,您可以将所有特定于该类型的声明放在一个位置,然后在某种意义上将它们关闭然后再打开。
这样可以更容易扩展,因为要更改类型,您只需要在DTD中更改一个位置。
在下面的示例中,<![%test;[ ... ]]>
内的任何内容都将被包含在内,<![%compile;[ ... ]]>
内的任何内容都将被忽略...
<!ENTITY % test "INCLUDE">
<!ENTITY % compile "IGNORE">
<![%test;[
<!ENTITY % type "test">
<!-- Any other "test" specific declarations. -->
]]>
<![%compile;[
<!ENTITY % type "compile">
<!-- Any other "compile" specific declarations. -->
]]>
<!ENTITY commonTestingLibs "
<dependency org='org.dbunit' name='dbunit' rev='${lib.version.dbunit}' conf='%type;->default, sources, javadoc' />
<dependency org='org.testng' name='testng' rev='${lib.version.testng}' conf='%type;->default, sources, javadoc' />
">
要忽略“test”并包含“compile”,您只需要更改两个实体:
<!ENTITY % test "IGNORE">
<!ENTITY % compile "INCLUDE">