跳到内容

XQuery/创建时间线

来自维基教科书,开放世界中的开放书籍

您想要创建一个事件数据的 时间线。时间线在水平滚动视图中显示事件。

我们将使用由 Simile-Widgets 项目 提供的 JavaScript 客户端 时间线小部件。在本例中,我们将使用时间线 2.2.0 API 调用。

为此,我们需要将事件日期列表转换为适当的格式,然后创建一个包含对 Simile JavaScript 库的调用的 HTML 页面。

步骤

  1. 查看示例事件 XML 文件格式
  2. 查看加载 XML 文件的 HTML 模板
  3. 创建生成 HTML 模板并加载相应 XML 数据文件的 XQuery 函数

我们的第一个示例将使用非持续时间事件(瞬时事件)列表。我们将在以后的章节中探讨持续时间事件和其他事件。

然后,我们将创建一个包含单个函数的简单 XQuery 模块,该函数加载一个简单的时间线。

使用标准 XML 日期格式的示例 XML 文件

[编辑 | 编辑源代码]

大多数 XML 日期使用 ISO 8601 编码。要使用此格式,您必须在数据文件中放入日期格式属性。

<data date-time-format="iso8601">
    <event start="2009-01-01" isDuration="false">
        First Day January, 2009
    </event>
    <event start="2009-01-01" isDuration="false">
        First Day of the Feb, 2009
    </event>
</data>

请注意,数据文件必须指定用作 XML 日期格式的 ISO8601 日期格式。

HTML 驱动程序模板

[编辑 | 编辑源代码]

示例 HTML 文件显示了如何使用 Timeline.loadXML() 函数加载此 XML 文件。

<html>
    <head>
        <script src="http://static.simile.mit.edu/timeline/api-2.2.0/timeline-api.js" type="text/javascript"></script>
        <script  type="text/javascript">
            <![CDATA[
var tl;


function onLoad() {
   var eventSource = new Timeline.DefaultEventSource();
   var bandInfos = [
     Timeline.createBandInfo({
         eventSource:    eventSource,
         date:           "Jan 01 2009 00:00:00 GMT",
         width:          "70%", 
         intervalUnit:   Timeline.DateTime.MONTH, 
         intervalPixels: 100
     }),
     Timeline.createBandInfo({
         eventSource:    eventSource,
         date:           "Jan 01 2009 00:00:00 GMT",
         width:          "30%", 
         intervalUnit:   Timeline.DateTime.YEAR, 
         intervalPixels: 200
     })
   ];
   bandInfos[1].syncWith = 0;
   bandInfos[1].highlight = true;
   
   tl = Timeline.create(document.getElementById("my-timeline"), bandInfos);
   Timeline.loadXML("example-01.xml", function(xml, url) { eventSource.loadXML(xml, url); });
 }
 
 var resizeTimerID = null;
 function onResize() {
     if (resizeTimerID == null) {
         resizeTimerID = window.setTimeout(function() {
             resizeTimerID = null;
             tl.layout();
         }, 500);
     }
 }
 ]]>
        </script>  
    </head>
    <body onload="onLoad();" onresize="onResize();">
        <h1>Timeline Template</h1>
        <div id="my-timeline" style="height: 150px; border: 2px solid blue">
            
        </div>
        <noscript>
            This page uses Javascript to show you a Timeline. Please enable Javascript in your browser to see the full page. Thank you.
        </noscript>
    </body>
</html>

示例图像

[编辑 | 编辑源代码]

这将生成以下示例

两个事件的示例时间线输出

示例模块

[编辑 | 编辑源代码]

非标准日期的格式

[编辑 | 编辑源代码]

使用非标准 XML 日期格式的示例 XML 事件文件

[编辑 | 编辑源代码]
<data>
    <event start="Jan 01 2009 00:00:00 GMT" isDuration="false"
        title="First Day of the New Year">
        First Day of the New Year</event>

    <event start="Feb 01 2009 00:00:00 GMT" isDuration="false"
        title="First Day of the Feb">
        First Day of the Feb</event>
</data>
华夏公益教科书