前言

放弃了找实习的念头后,决心搞论文。冥思苦想了好长时间,终于决定了方向,和学者合作网络相关。于是开始了提取dblp数据集,在刚开始运行脚本的时候总是报一个错误,“IOError: [Errno 2] : ‘dblp.dtd’”。

以下是xml文件格式:

1
2
3
4
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "dblp.dtd">
...
...

思考了好久后终于明白,是因为项目中缺少dtd文件,导致程序找不到报错。接下来是关于xml方面的知识,之后讲解dblp解析数据。

关于XML

什么是 XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种标记语言,很类似 HTML。
  • XML 的设计宗旨是传输数据,而非显示数据。

XML验证

形式良好的XML文档会遵守前几章介绍过的 XML 语法规则:

  • XML 文档必须有根元素
  • XML 文档必须有关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性必须加引号

合法的 XML 文档是“形式良好”的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

DTD(Document Type Definition)的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

1
2
3
4
5
6
7
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

SAX

sax是Python提供的一个解析xml文件的库,从它的源码中可以看出它提供了一些事件处理程序,通过实现这些处理程序完成解析功能,实现了C编写的Python处理模块提供的接口。