📄 using xml parsers.htm
字号:
<p><span class="normal105"><chapter>Conferencing</chapter><br>
<p></p><br>
<figure><br>
<figure-title>NNTP tools</figure-title><br>
<figure-image>./figures/fig.gif</figure-image><br>
</figure></span></p>
<p><span class="normal105"><font face="宋体" lang="ZH-CN">我用</font>CSS<font face="宋体" lang="ZH-CN">类的属性兼做风格和结构的表示,象这样</font>:
</span></p>
<p><span class="normal105"><h1 class="chapter">Conferencing</h1><br>
<p class="figure-title">NNTP tools</p><br>
<div class="figure-image"><br>
<img src="./figures/fig.gif"/><br>
</div></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">长远来看</font>,<font face="宋体" lang="ZH-CN">这种方法会毫无意义。</font>IE
5.0 <font face="宋体" lang="ZH-CN">已开始能够显示与</font>CSS<font face="宋体" lang="ZH-CN">相结合的纯</font>XML<font face="宋体" lang="ZH-CN">。一旦性能成熟且广泛使用</font>,
<font face="宋体" lang="ZH-CN">就不必将</font>XML<font face="宋体" lang="ZH-CN">转换为</font>XML<font face="宋体" lang="ZH-CN">然后递交浏览器。但目前,这种</font>XML/HTML/CSS<font face="宋体" lang="ZH-CN">的混合战略很有意思。确实既然我正通过脚本运行我的</font>XML<font face="宋体" lang="ZH-CN">资源,我能写纯粹的</font>XML<font face="宋体" lang="ZH-CN">并完全依靠脚本为浏览器提供内容。但不是每个人都想那样做。通过</font>CSS<font face="宋体" lang="ZH-CN">将结构化的信息编码</font>,
<font face="宋体" lang="ZH-CN">你生成直接在现在的浏览器中显示的</font>XML<font face="宋体" lang="ZH-CN">。</font></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">后来我意识到混合的途径并不排除使用</font>DTD<font face="宋体" lang="ZH-CN">。通常你先写</font>DTD,
<font face="宋体" lang="ZH-CN">再基于它建立</font>XML<font face="宋体" lang="ZH-CN">文档。但在使用</font>HTML<font face="宋体" lang="ZH-CN">中常用到一隐指的</font>DTD<font face="宋体" lang="ZH-CN">。使我吃惊的是发现和格式化十分容易。因为</font>expat<font face="宋体" lang="ZH-CN">不能检查有效性,我需要一解析器来做这件事。开始我用</font>DXP,
DataChannel<font face="宋体" lang="ZH-CN">的第一个基于</font>Java<font face="宋体" lang="ZH-CN">的解析器。它起初是</font>Norbert
Mikula<font face="宋体" lang="ZH-CN">的</font> NXP, <font face="宋体" lang="ZH-CN">现已被</font>Microsoft/DataChannel<font face="宋体" lang="ZH-CN">的</font>
DCXML<font face="宋体" lang="ZH-CN">所取代。</font></span></p>
<p><span class="normal105">DXP<font face="宋体" lang="ZH-CN">告诉了我需要知道的一切。首先它“埋怨”没有定义元素</font>(element)<font face="宋体" lang="ZH-CN">。因此我不得不象这样写出定义</font>:
</span></p>
<p><span class="normal105"><!ELEMENT a (#PCDATA)><br>
<!ELEMENT p (#PCDATA | i | u | b | <br>
span | center | a | tt)*></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">有人奇怪为什么</font>XML<font face="宋体" lang="ZH-CN">不能就用</font>XML<font face="宋体" lang="ZH-CN">描述之,但该由</font>SGML<font face="宋体" lang="ZH-CN">演变来的语法正是我们所需要的。第一个声明表示存在</font>'a'
<font face="宋体" lang="ZH-CN">元素,它包含了解析的字符数据。第二个声明表示存在</font>'p' <font face="宋体" lang="ZH-CN">元素,它包含解析的字符数据或所列的一系列元素。</font></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">我还规定了我正在使用的</font>CSS<font face="宋体" lang="ZH-CN">属性。这里是标志特殊元素的</font>p<font face="宋体" lang="ZH-CN">标记的变量</font>:
</span></p>
<p><span class="normal105"><!ATTLIST p <br>
class ( listing-title | <br>
figure-title | <br>
table-title | <br>
listing-caption | <br>
figure-caption <br>
) #IMPLIED<br>
></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">当我接着重新运行解析器,我分清一些在各处使用的规则。例如</font>,<font face="宋体" lang="ZH-CN">我曾想在表中不用图象。解析器找到了这些地方促使我决定是否允许</font>DTD<font face="宋体" lang="ZH-CN">中这种结构或是相应地改变源文件。它也会出现一个惊人的错误:在第二章打开的一个</font>div<font face="宋体" lang="ZH-CN">标记直到第七章才找到相应的结束标记。对于不检查有效性的解析器,错上加错,会得至正确!</font></span></p>
<p> </p>
<p><span class="normal105"><font face="宋体" lang="ZH-CN">整个过程只花了数小时。转换对于文件的改动不大,但使得他们倍添价值。在</font>O'Reilly
<font face="宋体" lang="ZH-CN">和</font>Associates<font face="宋体" lang="ZH-CN">的产品群机于接受</font>HTML
,<font face="宋体" lang="ZH-CN">不管它有多么整洁。当他们得知会得到结构良好和有效的</font>XML,<font face="宋体" lang="ZH-CN">他们真是欣喜若狂。</font></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">这个方法不是最理想的。你牺牲了</font>DTD<font face="宋体" lang="ZH-CN">的许多优点。例如,你能这样做:</font></span></p>
<p><span class="normal105"><! ELEMENT figure (<br>
figure-title, <br>
figure-body, <br>
figure-caption)></span></p>
<p> <span class="normal105"><font face="宋体" lang="ZH-CN">这个声明定义一图表作为单个复杂对象,它由三个必要成分组成的。</font>XML
<font face="宋体" lang="ZH-CN">打算这样做,下次类似情况我可能用这种方法。然而即使你真的这样利用</font>DTD,<font face="宋体" lang="ZH-CN">它的文件结构的声名强制性可能仍不够。比方一些属性有数千个允许的值。你能在</font>DTD<font face="宋体" lang="ZH-CN">中将其列出,但你可能想要在数据库中查找。有时需要依赖于解析器的程序代码补充</font>DTD<font face="宋体" lang="ZH-CN">的声名功能。</font></span><br>
<br>
<a href="#top"><<返回标题 </a><br>
</p>
<h4><b><a name="3"></a>微软的XML解析器</b></h4>
<p><span class="normal105">当我利用<a href="javascript:openWindow1();">表一</a>的转换方法对我的书的XML进行转换,它产生的HTML输出可以在任何的4.x浏览器中浏览。我用了CSS普通的一部分。(遗憾的是,目前Netscape和Microsoft的产品的CSS的实现状况使这种转换比应有的更艰难.)</span></p>
<p><span class="normal105"> 尽管都在Microsoft的环境下操作,你也可以采用<a href="javascript:openWindow2();">表二</a>的方法.它展示了在JScript控制下MSIE
5中的C++ 解析器.该解析器不是面向事件而是面向树(Tree)型结构.你一旦建立了整个的树来表示你的文档,你能横贯、转换和显示该树.在实际应用中,两种方法区别不大,有些解析器两者都支持.IBM的Java解析器DXP和其它工具实现了简单的XML
API--SAX. </span></p>
<p><span class="normal105"> 在浏览器内部运行时,通过访问浏览器的文档对象模块(DOM),基于解析器的应用能做各种有用的事情.理论上,<a href="javascript:openWindow1();">表一</a>
中实现的简单反馈机制可以成为交互的文档编辑器,直接在源文件中就可以积累浏览者的评价. C++ 解析器不一定要在浏览器中运行.我现在从一个.CMD文件代替DXP来用它检查我的书的有效性.怎么做?WSH(Windows
Scripting Host)可以实现.提供validate.js的文件,它包括: </span></p>
<p> </p>
<p><span class="normal105"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><code>var
doc = new <br>
ActiveXObject("microsoft.xmldom");<br>
doc.load("c:\\jon\\book.xml");<br>
if (doc.lastError.reason != "") <br>
{ WScript.echo(doc.lastError.reason); }</code></font></span></p>
<p><span class="normal105"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
我能用命令cscript validate.js 来确认书的有效性</font>.</span></p>
<p><span class="normal105">Java程序员想要把确认有效的XML解析器结合进他们的应用可以使用DCXML, DataChannel
DXP的后一产品. Microsoft/DataChannel 的合作产品刚以beta版的形式在<a href="../../../www.datachannel.com/index.htm" tppabs="http://www.datachannel.com/" target="_blank">www.datachannel.com
</a>上公布. 目前还没有使用说明文档,但如果你<span class="normal105">要了解该C++解析器如何使用</span>
,你可以体会在<a href="javascript:openWindow3();">表三</a>中显示的Java的版本. </span></p>
<p><span class="normal105"> 目前XML的发展日新月异. <a href="../../../www.w3c.org/index.htm" tppabs="http://www.w3c.org/" target="_blank">www.w3c.org</a>和
<a href="../../../www.finetuning.com/index.htm" tppabs="http://www.finetuning.com/" target="_blank">www.finetuning.com</a>
、<a href="../../index-1.htm" tppabs="http://www.xml.org.cn/">www.xml.org.cn</a>能让你紧跟XML的步伐. 不要等到5.0浏览器实现了所有的XML的特点再去学习.每一个现有的HTML网页就是潜在的相同甚至是更有价值的XML页!
</span> </p>
</td>
</tr>
<tr>
<td>
<hr size="1">
<p align="center"> [<a href="#top">返回标题</a>][<a href="../resource.htm" tppabs="http://www.xml.org.cn:8188/resource/resource.htm">返回资源</a>][<a href="../../default.asp.htm" tppabs="http://www.xml.org.cn:8188/default.asp">返回首页</a>][<a href="mailto:xmlteam@egroups.com">欢迎投稿</a>]
<br>
<font color="#FF0033" size="-1">本站点所刊文章版权,均归本站点所有。署名作者拥有其著作权。<br>
未经</font><font color="#FF0033"><a href="mailto:xmlteam@egroups.com"><font color="#6666FF" size="-1">允许</font></a></font><font color="#FF0033" size="-1">,不得随意转载,违者必究!!</font>
</p>
</td>
</tr>
</table>
<B>
<P ALIGN="CENTER"> </P>
<P ALIGN="CENTER"><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><br>
</font></P>
</B><FONT SIZE=2></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="CENTER"></P>
</FONT>
<P> </P>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -