基于参考文献标准格式的XML与Schema验证及格式输出查询系统设计简要示例

目录
[隐藏]

这是本学期《XML技术应用》课程留下的作业之一。完整题目如下:

1)        设计一个记录参考文献结构的Schema。参考文献应至少包括:专著、论文集、学位论文、报告、期刊文章、论文集中的析出文献、报纸文章和电子文献等;
2)        按照上述Schema,选取各类典型文献若干,完成XML实例,要求能够通过Schema验证;
3)        设计一个基于网页的文献查询系统,可以从上述XML实例中按责任者、文献题名和年份区间查询文献,并按照《参考文献标准格式》(见附录)的要求显示出来。每个条目同时应是超链接,点击后能够浏览原始文献内容。

 本设计所参照的参考文献格式参见这里:参考文献标准格式简要参考

XML文件设计

根据要求,写了一个XML文件如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <references    
  3. xmlns="http://www.w3school.com.cn"    
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  5. xsi:schemaLocation="http://www.w3school.com.cn referencesFormat.xsd">  
  6.     <!–type1 专著M、论文集C、学位论文D、报告R–>  
  7.     <M>  
  8.         <url>http://www.w3school.com.cn</url>  
  9.         <id>1</id>  
  10.         <author>刘国钧</author>  
  11.         <title>图书馆目录</title>  
  12.         <type>M</type>  
  13.         <pubplace>北京</pubplace>  
  14.         <pub>高等教育出版社</pub>  
  15.         <pubdate>  
  16.             <year>1957</year>  
  17.         </pubdate>  
  18.         <page>15-18</page>  
  19.     </M>  
  20.     <C>  
  21.         <!–论文集–>  
  22.         <url>http://www.cesi.ac.cn/cesi/xinwen/2011/0105/8884.html</url>  
  23.         <id>2</id>  
  24.         <author>李宁</author>  
  25.         <title>XML与信息共享</title>  
  26.         <type>C</type>  
  27.         <pubplace>北京</pubplace>  
  28.         <pub>2010全国文档信息处理学术会议论文集</pub>  
  29.         <pubdate>  
  30.             <year>2010</year>  
  31.         </pubdate>  
  32.         <page>238-241</page>  
  33.     </C>  
  34.     <D>  
  35.         <!–学位论文–>  
  36.         <url>http://www.w3school.com.cn</url>  
  37.         <id>3</id>  
  38.         <author>张伟</author>  
  39.         <title>网络安全特征匹配关键技术研究</title>  
  40.         <type>D</type>  
  41.         <pubplace>北京</pubplace>  
  42.         <pub>清华大学</pub>  
  43.         <pubdate>  
  44.             <year>2008</year>  
  45.         </pubdate>  
  46.     </D>  
  47.     <R>  
  48.         <!–报告–>  
  49.         <url>http://www.w3school.com.cn</url>  
  50.         <id>4</id>  
  51.         <author>《中国地震》杂志社</author>  
  52.         <title>《中国地震》近4年被引用情况统计报告</title>  
  53.         <type>R</type>  
  54.         <pubplace>北京</pubplace>  
  55.         <pub>《中国地震》</pub>  
  56.         <pubdate>  
  57.             <year>2005</year>  
  58.         </pubdate>  
  59.         <page>kexuan</page>  
  60.     </R>  
  61.     <!–type2 B.期刊文章–>  
  62.     <J>  
  63.         <url>http://www.w3school.com.cn</url>  
  64.         <id>5</id>  
  65.         <author>何龄修</author>  
  66.         <title>读南明史</title>  
  67.         <type>J</type>  
  68.         <pub>中国史研究</pub>  
  69.         <pubdate>  
  70.             <year>1998</year>  
  71.         </pubdate>  
  72.         <volume>3</volume>  
  73.         <page>167-173</page>  
  74.     </J>  
  75.     <!–type3 D.报纸文章–>  
  76.     <N>  
  77.         <url>http://www.w3school.com.cn</url>  
  78.         <id>6</id>  
  79.         <author>谢希德</author>  
  80.         <title>创造学习的新思路</title>  
  81.         <type>N</type>  
  82.         <pub>人民日报</pub>  
  83.         <pubdate>  
  84.             <year>1998</year>  
  85.             <month>12</month>  
  86.             <day>25</day>  
  87.         </pubdate>  
  88.         <volume>10</volume>  
  89.     </N>  
  90.     <!–type4 析出文献–>  
  91.     <A>  
  92.         <url>http://www.w3school.com.cn</url>  
  93.         <id>7</id>  
  94.         <author>钟文发</author>  
  95.         <title>非线性规划在可燃毒物配置中的应用</title>  
  96.         <type>A</type>  
  97.         <oldauthoer>赵炜</oldauthoer>  
  98.         <oldtitle>运筹学的理论与应用——中国运筹学会第五届大会论文集</oldtitle>  
  99.         <oldtype>C</oldtype>  
  100.         <pubplace>西安</pubplace>  
  101.         <pub>西安电子科技大学出版社</pub>  
  102.         <pubdate>  
  103.             <year>1996</year>  
  104.         </pubdate>  
  105.         <page>468</page>  
  106.     </A>  
  107.     <!–type5 电子文献–>  
  108.     <Electronic>  
  109.         <url>http://www.cajcd.edu.cn/pub/wml.html</url>  
  110.         <id>8</id>  
  111.         <author>王明亮</author>  
  112.         <title>关于中国学术期刊标准化数据库系统工程的进展</title>  
  113.         <type>EB/OL</type>  
  114.         <pub>http://www.cajcd.edu.cn/pub/wml.html</pub>  
  115.         <pubdate>  
  116.             <year>1998</year>  
  117.             <month>08</month>  
  118.             <day>16</day>  
  119.         </pubdate>  
  120.         <quotedate>  
  121.             <year>1998</year>  
  122.             <month>10</month>  
  123.             <day>01</day>  
  124.         </quotedate>  
  125.     </Electronic>  
  126.     <Electronic>  
  127.         <url>http://www.w3school.com.cn</url>  
  128.         <id>9</id>  
  129.         <author>万锦</author>  
  130.         <title>中国大学学报文摘(1983-1993).英文版</title>  
  131.         <type>DB/CD</type>  
  132.         <pub>北京:中国大百科全书出版社</pub>  
  133.         <pubdate>  
  134.             <year>1996</year>  
  135.         </pubdate>  
  136.     </Electronic>  
  137.     <!–type6   
  138. <S>standard</S>  
  139. <P>patent</P>  
  140. >  
  141. </references>  

Schema验证

 设计的针对该XML文件有效性验证的Schema文件内容如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <xs:schema  
  3. xmlns:xs="http://www.w3.org/2001/XMLSchema"    
  4. xmlns="http://www.w3school.com.cn"    
  5. targetNamespace="http://www.w3school.com.cn"    
  6. elementFormDefault="qualified">  
  7. <!– 基本类型定义 1 –>  
  8.     <xs:simpleType name="stringtype">  
  9.         <xs:restriction base="xs:string"/>  
  10.     </xs:simpleType>  
  11.     <xs:simpleType name="inttype">  
  12.         <xs:restriction base="xs:positiveInteger"/>  
  13.     </xs:simpleType>  
  14.     <xs:simpleType name="dectype">  
  15.         <xs:restriction base="xs:decimal"/>  
  16.     </xs:simpleType>  
  17.   
  18.     <!–日期类型定义–>  
  19.     <xs:complexType name="datetype">  
  20.         <xs:sequence>  
  21.             <xs:element name="year" type="stringtype"/>  
  22.             <xs:element name="month" type="stringtype" minOccurs="0"/>  
  23.             <xs:element name="day" type="stringtype" minOccurs="0"/>  
  24.         </xs:sequence>  
  25.     </xs:complexType>  
  26.     <!–基本共有元素信息组定义–>  
  27.     <xs:group name="basegroup">  
  28.         <xs:sequence>  
  29.             <xs:element name="url" type="stringtype"/>  
  30.             <xs:element name="id" type="inttype"/>  
  31.             <xs:element name="author" type="stringtype"/>  
  32.             <xs:element name="title" type="stringtype"/>  
  33.             <xs:element name="type" type="stringtype"/>  
  34.         </xs:sequence>  
  35.     </xs:group>  
  36.     <!–type1 专著M、论文集C、学位论文D、报告R–>  
  37.     <xs:complexType name="MCDRtype">  
  38.         <xs:sequence>  
  39.             <xs:group ref="basegroup"/>  
  40.             <xs:element name="pubplace" type="stringtype"/>  
  41.             <xs:element name="pub" type="stringtype"/>             
  42.             <xs:element name="pubdate" type="datetype"/>  
  43.             <xs:element name="page" type="stringtype" minOccurs="0"/>  
  44.         </xs:sequence>  
  45.     </xs:complexType>  
  46.     <!–type2 B.期刊文章–>  
  47.     <xs:complexType name="Jtype">  
  48.         <xs:sequence>  
  49.             <xs:group ref="basegroup"/>  
  50.             <xs:element name="pub" type="stringtype"/>  
  51.             <xs:element name="pubdate" type="datetype"/>  
  52.             <xs:element name="volume" type="stringtype"/>              
  53.             <xs:element name="page" type="stringtype" minOccurs="0"/>  
  54.         </xs:sequence>  
  55.     </xs:complexType>  
  56.     <!–type3 D.报纸文章–>  
  57.     <xs:complexType name="Ntype">  
  58.         <xs:sequence>  
  59.             <xs:group ref="basegroup"/>  
  60.             <xs:element name="pub" type="stringtype"/>  
  61.             <xs:element name="pubdate" type="datetype"/>  
  62.             <xs:element name="volume" type="stringtype"/>  
  63.         </xs:sequence>  
  64.     </xs:complexType>  
  65.     <!–type4 论文析出文献–>  
  66.     <xs:complexType name="Atype">  
  67.         <xs:sequence>  
  68.             <xs:group ref="basegroup"/>  
  69.             <xs:element name="oldauthoer" type="stringtype"/>  
  70.             <xs:element name="oldtitle" type="stringtype"/>  
  71.             <xs:element name="oldtype" type="stringtype"/>  
  72.             <xs:element name="pubplace" type="stringtype"/>  
  73.             <xs:element name="pub" type="stringtype"/>  
  74.             <xs:element name="pubdate" type="datetype"/>  
  75.             <xs:element name="page" type="stringtype" minOccurs="0"/>  
  76.         </xs:sequence>  
  77.     </xs:complexType>  
  78.     <!–type5 电子文献–>  
  79.     <xs:complexType name="Electronictype">  
  80.         <xs:sequence>  
  81.             <xs:group ref="basegroup"/>  
  82.             <xs:element name="pub" type="stringtype"/>  
  83.             <xs:element name="pubdate" type="datetype"/>  
  84.             <xs:element name="quotedate" type="datetype" minOccurs="0"/>  
  85.         </xs:sequence>  
  86.     </xs:complexType>  
  87.     <!–参考文献类型定义–>    
  88.     <xs:complexType name="referencestype">  
  89.         <xs:sequence>  
  90.             <xs:element name="M" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>  
  91.             <xs:element name="C" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>  
  92.             <xs:element name="D" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>  
  93.             <xs:element name="R" type="MCDRtype" maxOccurs="unbounded" minOccurs="0"/>  
  94.             <xs:element name="J" type="Jtype" maxOccurs="unbounded" minOccurs="0"/>  
  95.             <xs:element name="N" type="Ntype" maxOccurs="unbounded" minOccurs="0"/>  
  96.             <xs:element name="A" type="Atype" maxOccurs="unbounded" minOccurs="0"/>  
  97.             <xs:element name="Electronic" type="Electronictype" maxOccurs="unbounded" minOccurs="0"/>  
  98.         </xs:sequence>  
  99.     </xs:complexType>  
  100.     <xs:element name="references" type="referencestype"/>  
  101. </xs:schema>  

XSLT样式转换

针对该XML内容设计的XSLT样式转换文件内容如下:

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?><!– DWXMLSource="referencesFormat.xml" –>  
  2. <!DOCTYPE xsl:stylesheet  [   
  3.     <!ENTITY nbsp   "&#160;">  
  4.     <!ENTITY copy   "&#169;">  
  5.     <!ENTITY reg    "&#174;">  
  6.     <!ENTITY trade  "&#8482;">  
  7.     <!ENTITY mdash  "&#8212;">  
  8.     <!ENTITY ldquo  "&#8220;">  
  9.     <!ENTITY rdquo  "&#8221;">    
  10.     <!ENTITY pound  "&#163;">  
  11.     <!ENTITY yen    "&#165;">  
  12.     <!ENTITY euro   "&#8364;">  
  13. ]>  
  14. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  15. <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"/>  
  16. <xsl:template match="/references">  
  17.   
  18. <html xmlns="http://www.w3.org/1999/xhtml" lang="UTF-8">  
  19. <head>  
  20. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  21. <meta http-equiv="Content-Language" content="UTF-8" />  
  22. <meta name="Author" content="webmaster@lzw.me,志文工作室" />  
  23. <meta name="Keywords" content="referencesFormat Query" />  
  24. <meta name="Description" content="referencesFormat Query System" />  
  25. <title>Result – XML To XSLT 转换 – by Lizhiwen</title>  
  26. <link rel="stylesheet" type="text/css" href="files/top.css" />  
  27. </head>  
  28. <body>  
  29. <div id="vv_head">  
  30.   <h1>  
  31.     <div class="vvrss"><a title="referencesFormat Query" href="result.asp">Query All</a></div>  
  32.     <a title="referencesFormat Query" href="index.html">XML – XSLT 转换</a> <span>– by Lizhiwen</span> </h1>  
  33. </div>  
  34. <div class="return">XML – XSLT 转换 – by <a href="http://lzw.me" target="_blank">Lizhiwen</a></div>  
  35. <div class="result">  
  36.   
  37. <!–type1 专著M、论文集C、学位论文D、报告R–>  
  38. <xsl:for-each select="M|C|D|R">  
  39.     [<xsl:value-of select="id"/><xsl:value-of select="author"/>  
  40.     <xsl:element name="a">  
  41.     <!– 链接 –>  
  42.         <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>  
  43.         <xsl:attribute name="target">_blank</xsl:attribute>  
  44.         <xsl:value-of select="title"/>  
  45.     </xsl:element>  
  46.     [<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 />  
  47. </xsl:for-each>  
  48. <!–期刊文章–>  
  49. <xsl:for-each select="J">  
  50.     [<xsl:value-of select="id"/><xsl:value-of select="author"/>  
  51.     <xsl:element name="a">  
  52.     <!– 链接 –>  
  53.         <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>  
  54.         <xsl:attribute name="target">_blank</xsl:attribute>  
  55.         <xsl:value-of select="title"/>  
  56.     </xsl:element>  
  57.     [<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 />  
  58. </xsl:for-each>  
  59. <!–报纸文章–>  
  60. <xsl:for-each select="N">  
  61.     [<xsl:value-of select="id"/><xsl:value-of select="author"/>  
  62.     <xsl:element name="a">  
  63.     <!– 链接 –>  
  64.         <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>  
  65.         <xsl:attribute name="target">_blank</xsl:attribute>  
  66.         <xsl:value-of select="title"/>  
  67.     </xsl:element>  
  68.     [<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 />  
  69. </xsl:for-each>  
  70. <!–析出文献–>  
  71. <xsl:for-each select="A">  
  72.     [<xsl:value-of select="id"/><xsl:value-of select="author"/>  
  73.     <xsl:element name="a">  
  74.     <!– 链接 –>  
  75.         <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>  
  76.         <xsl:attribute name="target">_blank</xsl:attribute>  
  77.         <xsl:value-of select="title"/>  
  78.     </xsl:element>  
  79.     [<xsl:value-of select="type"/>].    
  80.     <xsl:value-of select="oldauthoer"/>.<xsl:value-of select="oldtitle"/>[<xsl:value-of select="oldtype"/>].    
  81.     <xsl:value-of select="pubplace"/><xsl:value-of select="pub"/><xsl:value-of select="pubdate/year"/><xsl:value-of select="page"/> <br />  
  82. </xsl:for-each>  
  83. <!–电子文献–>  
  84. <xsl:for-each select="Electronic">  
  85.     [<xsl:value-of select="id"/><xsl:value-of select="author"/>  
  86.     <xsl:element name="a">  
  87.     <!– 链接 –>  
  88.         <xsl:attribute name="href"><xsl:value-of select="url"/></xsl:attribute>  
  89.         <xsl:attribute name="target">_blank</xsl:attribute>  
  90.         <xsl:value-of select="title"/>  
  91.     </xsl:element>  
  92.     [<xsl:value-of select="type"/>]. <xsl:value-of select="pubplace"/><xsl:value-of select="pub"/>,    
  93.     <xsl:value-of select="pubdate/year"/><xsl:value-of select="pubdate/month"/><xsl:value-of select="pubdate/day"/>/   
  94.     <xsl:value-of select="quotedate/year"/><xsl:value-of select="quotedate/month"/><xsl:value-of select="quotedate/day"/><br />  
  95. </xsl:for-each>  
  96.   
  97. </div>  
  98. </body>  
  99. </html>  
  100.   
  101. </xsl:template>  
  102. </xsl:stylesheet>  

 查询系统

关于查询系统,用ASP设计:首先读取xml文件,然后进行格式化输出。示例可参考这里:

referencesFormat Query

 

系统设计过程中遇到的问题

 
1.       Schema对于XML的验证,如何可简易地实现各种文献类型随意排序,又不会减弱对XML格式的限制,还未获得较好的解决方案;
2.       设计查询系统过程中,遇到很多细节问题。由于每一级节点的对象包括注释等可能不同,这在获取未知节点的文本值时容易出现问题。解决方法一是首先进行NodeType判断然后再确定作何操作;在获取输出元素节点文本值时,注意x1.nodeValue、x1.text以及x1.firstchild.nodevalue方式的区别。
3.       文件编码问题,容易出现错误。XML文件读取均为utf-8编码格式,查询输出时容易出现编码错误。解决方法:asp文件头添加<%@ codepage=65001%>强制转换文件编码。在多次查询中还是偶尔会出现乱码,这仍然是编码问题,不同浏览器表现有区别。

 

点赞 (0)
  1. 美女图片说道:

    又是代码·······看不懂呀········

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code