这是本学期《XML技术应用》课程留下的作业之一。完整题目如下:
1) 设计一个记录参考文献结构的Schema。参考文献应至少包括:专著、论文集、学位论文、报告、期刊文章、论文集中的析出文献、报纸文章和电子文献等;2) 按照上述Schema,选取各类典型文献若干,完成XML实例,要求能够通过Schema验证;3) 设计一个基于网页的文献查询系统,可以从上述XML实例中按责任者、文献题名和年份区间查询文献,并按照《参考文献标准格式》(见附录)的要求显示出来。每个条目同时应是超链接,点击后能够浏览原始文献内容。
本设计所参照的参考文献格式参见这里:参考文献标准格式简要参考
XML文件设计
根据要求,写了一个XML文件如下:
XML/HTML代码
- <?xml version="1.0" encoding="UTF-8"?>
- <references
- xmlns="http://www.w3school.com.cn"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.w3school.com.cn referencesFormat.xsd">
- <!–type1 专著M、论文集C、学位论文D、报告R–>
- <M>
- <url>http://www.w3school.com.cn</url>
- <id>1</id>
- <author>刘国钧</author>
- <title>图书馆目录</title>
- <type>M</type>
- <pubplace>北京</pubplace>
- <pub>高等教育出版社</pub>
- <pubdate>
- <year>1957</year>
- </pubdate>
- <page>15-18</page>
- </M>
- <C>
- <!–论文集–>
- <url>http://www.cesi.ac.cn/cesi/xinwen/2011/0105/8884.html</url>
- <id>2</id>
- <author>李宁</author>
- <title>XML与信息共享</title>
- <type>C</type>
- <pubplace>北京</pubplace>
- <pub>2010全国文档信息处理学术会议论文集</pub>
- <pubdate>
- <year>2010</year>
- </pubdate>
- <page>238-241</page>
- </C>
- <D>
- <!–学位论文–>
- <url>http://www.w3school.com.cn</url>
- <id>3</id>
- <author>张伟</author>
- <title>网络安全特征匹配关键技术研究</title>
- <type>D</type>
- <pubplace>北京</pubplace>
- <pub>清华大学</pub>
- <pubdate>
- <year>2008</year>
- </pubdate>
- </D>
- <R>
- <!–报告–>
- <url>http://www.w3school.com.cn</url>
- <id>4</id>
- <author>《中国地震》杂志社</author>
- <title>《中国地震》近4年被引用情况统计报告</title>
- <type>R</type>
- <pubplace>北京</pubplace>
- <pub>《中国地震》</pub>
- <pubdate>
- <year>2005</year>
- </pubdate>
- <page>kexuan</page>
- </R>
- <!–type2 B.期刊文章–>
- <J>
- <url>http://www.w3school.com.cn</url>
- <id>5</id>
- <author>何龄修</author>
- <title>读南明史</title>
- <type>J</type>
- <pub>中国史研究</pub>
- <pubdate>
- <year>1998</year>
- </pubdate>
- <volume>3</volume>
- <page>167-173</page>
- </J>
- <!–type3 D.报纸文章–>
- <N>
- <url>http://www.w3school.com.cn</url>
- <id>6</id>
- <author>谢希德</author>
- <title>创造学习的新思路</title>
- <type>N</type>
- <pub>人民日报</pub>
- <pubdate>
- <year>1998</year>
- <month>12</month>
- <day>25</day>
- </pubdate>
- <volume>10</volume>
- </N>
- <!–type4 析出文献–>
- <A>
- <url>http://www.w3school.com.cn</url>
- <id>7</id>
- <author>钟文发</author>
- <title>非线性规划在可燃毒物配置中的应用</title>
- <type>A</type>
- <oldauthoer>赵炜</oldauthoer>
- <oldtitle>运筹学的理论与应用——中国运筹学会第五届大会论文集</oldtitle>
- <oldtype>C</oldtype>
- <pubplace>西安</pubplace>
- <pub>西安电子科技大学出版社</pub>
- <pubdate>
- <year>1996</year>
- </pubdate>
- <page>468</page>
- </A>
- <!–type5 电子文献–>
- <Electronic>
- <url>http://www.cajcd.edu.cn/pub/wml.html</url>
- <id>8</id>
- <author>王明亮</author>
- <title>关于中国学术期刊标准化数据库系统工程的进展</title>
- <type>EB/OL</type>
- <pub>http://www.cajcd.edu.cn/pub/wml.html</pub>
- <pubdate>
- <year>1998</year>
- <month>08</month>
- <day>16</day>
- </pubdate>
- <quotedate>
- <year>1998</year>
- <month>10</month>
- <day>01</day>
- </quotedate>
- </Electronic>
- <Electronic>
- <url>http://www.w3school.com.cn</url>
- <id>9</id>
- <author>万锦</author>
- <title>中国大学学报文摘(1983-1993).英文版</title>
- <type>DB/CD</type>
- <pub>北京:中国大百科全书出版社</pub>
- <pubdate>
- <year>1996</year>
- </pubdate>
- </Electronic>
- <!–type6
- <S>standard</S>
- <P>patent</P>
- —>
- </references>
Schema验证
设计的针对该XML文件有效性验证的Schema文件内容如下:
XML/HTML代码
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema
- xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns="http://www.w3school.com.cn"
- targetNamespace="http://www.w3school.com.cn"
- elementFormDefault="qualified">
- <!– 基本类型定义 1 –>
- <xs:simpleType name="stringtype">
- <xs:restriction base="xs:string"/>
- </xs:simpleType>
- <xs:simpleType name="inttype">
- <xs:restriction base="xs:positiveInteger"/>
- </xs:simpleType>
- <xs:simpleType name="dectype">
- <xs:restriction base="xs:decimal"/>
- </xs:simpleType>
- <!–日期类型定义–>
- <xs:complexType name="datetype">
- <xs:sequence>
- <xs:element name="year" type="stringtype"/>
- <xs:element name="month" type="stringtype" minOccurs="0"/>
- <xs:element name="day" type="stringtype" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <!–基本共有元素信息组定义–>
- <xs:group name="basegroup">
- <xs:sequence>
- <xs:element name="url" type="stringtype"/>
- <xs:element name="id" type="inttype"/>
- <xs:element name="author" type="stringtype"/>
- <xs:element name="title" type="stringtype"/>
- <xs:element name="type" type="stringtype"/>
- </xs:sequence>
- </xs:group>
- <!–type1 专著M、论文集C、学位论文D、报告R–>
- <xs:complexType name="MCDRtype">
- <xs:sequence>
- <xs:group ref="basegroup"/>
- <xs:element name="pubplace" type="stringtype"/>
- <xs:element name="pub" type="stringtype"/>
- <xs:element name="pubdate" type="datetype"/>
- <xs:element name="page" type="stringtype" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <!–type2 B.期刊文章–>
- <xs:complexType name="Jtype">
- <xs:sequence>
- <xs:group ref="basegroup"/>
- <xs:element name="pub" type="stringtype"/>
- <xs:element name="pubdate" type="datetype"/>
- <xs:element name="volume" type="stringtype"/>
- <xs:element name="page" type="stringtype" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <!–type3 D.报纸文章–>
- <xs:complexType name="Ntype">
- <xs:sequence>
- <xs:group ref="basegroup"/>
- <xs:element name="pub" type="stringtype"/>
- <xs:element name="pubdate" type="datetype"/>
- <xs:element name="volume" type="stringtype"/>
- </xs:sequence>
- </xs:complexType>
- <!–type4 论文析出文献–>
- <xs:complexType name="Atype">
- <xs:sequence>
- <xs:group ref="basegroup"/>
- <xs:element name="oldauthoer" type="stringtype"/>
- <xs:element name="oldtitle" type="stringtype"/>
- <xs:element name="oldtype" type="stringtype"/>
- <xs:element name="pubplace" type="stringtype"/>
- <xs:element name="pub" type="stringtype"/>
- <xs:element name="pubdate" type="datetype"/>
- <xs:element name="page" type="stringtype" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <!–type5 电子文献–>
- <xs:complexType name="Electronictype">
- <xs:sequence>
- <xs:group ref="basegroup"/>
- <xs:element name="pub" type="stringtype"/>
- <xs:element name="pubdate" type="datetype"/>
- <xs:element name="quotedate" type="datetype" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <!–参考文献类型定义–>
- <xs:complexType name="referencestype">
- <xs:sequence>
- <xs:element name="M" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="C" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="D" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="R" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="J" type="Jtype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="N" type="Ntype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="A" type="Atype" maxOccurs="unbounded" minOccurs="0"/>
- <xs:element name="Electronic" type="Electronictype" maxOccurs="unbounded" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:element name="references" type="referencestype"/>
- </xs:schema>
XSLT样式转换
针对该XML内容设计的XSLT样式转换文件内容如下:
XML/HTML代码
- <?xml version="1.0" encoding="utf-8"?><!– DWXMLSource="referencesFormat.xml" –>
- <!DOCTYPE xsl:stylesheet [
- <!ENTITY nbsp " ">
- <!ENTITY copy "©">
- <!ENTITY reg "®">
- <!ENTITY trade "™">
- <!ENTITY mdash "—">
- <!ENTITY ldquo "“">
- <!ENTITY rdquo "”">
- <!ENTITY pound "£">
- <!ENTITY yen "¥">
- <!ENTITY euro "€">
- ]>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
- <xsl:template match="/references">
- <html xmlns="http://www.w3.org/1999/xhtml" lang="UTF-8">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <meta http-equiv="Content-Language" content="UTF-8" />
- <meta name="Author" content="webmaster@lzw.me,志文工作室" />
- <meta name="Keywords" content="referencesFormat Query" />
- <meta name="Description" content="referencesFormat Query System" />
- <title>Result – XML To XSLT 转换 – by Lizhiwen</title>
- <link rel="stylesheet" type="text/css" href="files/top.css" />
- </head>
- <body>
- <div id="vv_head">
- <h1>
- <div class="vvrss"><a title="referencesFormat Query" href="result.asp">Query All</a></div>
- <a title="referencesFormat Query" href="index.html">XML – XSLT 转换</a> <span>– by Lizhiwen</span> </h1>
- </div>
- <div class="return">XML – XSLT 转换 – by <a href="http://lzw.me" target="_blank">Lizhiwen</a></div>
- <div class="result">
- <!–type1 专著M、论文集C、学位论文D、报告R–>
- <xsl:for-each select="M|C|D|R">
- [<xsl:value-of select="id"/>] <xsl:value-of select="author"/>
- <xsl:element name="a">
- <!– 链接 –>
- <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
- <xsl:attribute name="target">_blank</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- [<xsl:value-of select="type"/>]. <xsl:value-of select="pubplace"/>:<xsl:value-of select="pub"/>, <xsl:value-of select="pubdate/year"/>.<xsl:value-of select="page"/> <br />
- </xsl:for-each>
- <!–期刊文章–>
- <xsl:for-each select="J">
- [<xsl:value-of select="id"/>] <xsl:value-of select="author"/>
- <xsl:element name="a">
- <!– 链接 –>
- <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
- <xsl:attribute name="target">_blank</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- [<xsl:value-of select="type"/>]. <xsl:value-of select="pubplace"/>:<xsl:value-of select="pub"/>, <xsl:value-of select="pubdate/year"/>, <xsl:value-of select="volume"/>:<xsl:value-of select="page"/> <br />
- </xsl:for-each>
- <!–报纸文章–>
- <xsl:for-each select="N">
- [<xsl:value-of select="id"/>] <xsl:value-of select="author"/>
- <xsl:element name="a">
- <!– 链接 –>
- <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
- <xsl:attribute name="target">_blank</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- [<xsl:value-of select="type"/>]. <xsl:value-of select="pubplace"/>:<xsl:value-of select="pub"/>, <xsl:value-of select="pubdate/year"/>–<xsl:value-of select="pubdate/month"/>–<xsl:value-of select="pubdate/day"/>, <xsl:value-of select="volume"/><br />
- </xsl:for-each>
- <!–析出文献–>
- <xsl:for-each select="A">
- [<xsl:value-of select="id"/>] <xsl:value-of select="author"/>
- <xsl:element name="a">
- <!– 链接 –>
- <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
- <xsl:attribute name="target">_blank</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- [<xsl:value-of select="type"/>].
- <xsl:value-of select="oldauthoer"/>.<xsl:value-of select="oldtitle"/>[<xsl:value-of select="oldtype"/>].
- <xsl:value-of select="pubplace"/>:<xsl:value-of select="pub"/>, <xsl:value-of select="pubdate/year"/>, <xsl:value-of select="page"/> <br />
- </xsl:for-each>
- <!–电子文献–>
- <xsl:for-each select="Electronic">
- [<xsl:value-of select="id"/>] <xsl:value-of select="author"/>
- <xsl:element name="a">
- <!– 链接 –>
- <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>
- <xsl:attribute name="target">_blank</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- [<xsl:value-of select="type"/>]. <xsl:value-of select="pubplace"/>:<xsl:value-of select="pub"/>,
- <xsl:value-of select="pubdate/year"/>–<xsl:value-of select="pubdate/month"/>–<xsl:value-of select="pubdate/day"/>/
- <xsl:value-of select="quotedate/year"/>–<xsl:value-of select="quotedate/month"/>–<xsl:value-of select="quotedate/day"/><br />
- </xsl:for-each>
- </div>
- </body>
- </html>
- </xsl:template>
- </xsl:stylesheet>
查询系统
关于查询系统,用ASP设计:首先读取xml文件,然后进行格式化输出。示例可参考这里:
系统设计过程中遇到的问题
1. Schema对于XML的验证,如何可简易地实现各种文献类型随意排序,又不会减弱对XML格式的限制,还未获得较好的解决方案;
2. 设计查询系统过程中,遇到很多细节问题。由于每一级节点的对象包括注释等可能不同,这在获取未知节点的文本值时容易出现问题。解决方法一是首先进行NodeType判断然后再确定作何操作;在获取输出元素节点文本值时,注意x1.nodeValue、x1.text以及x1.firstchild.nodevalue方式的区别。
3. 文件编码问题,容易出现错误。XML文件读取均为utf-8编码格式,查询输出时容易出现编码错误。解决方法:asp文件头添加<%@ codepage=65001%>强制转换文件编码。在多次查询中还是偶尔会出现乱码,这仍然是编码问题,不同浏览器表现有区别。
又是代码·······看不懂呀········