IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

XML 问题: OASIS 选举标记语言

投票和选举的 XML 格式标准

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

David Mertz, Ph.D. (mertz@gnosis.cx), Bean Counter, Gnosis Software, Inc.

2004 年 11 月 01 日

结构化信息标准促进组织(Organization for the Advancement of Structured Information Standards,OASIS)开发了很多应用于政府、法律和商业的 XML 标准。选举标记语言(Election Markup Language,EML)是 OASIS 对选举世界的尝试性介入,关注的重点是政府管辖范围之内的投票。David 将在这一期文章中介绍 EML 的结构和目标,分析目前在欧洲得到广泛应用的这个标准,将如何对美国未来的数据标准产生深远的影响。

XML 问题的上一期 讨论了将 XML 用于开源代码投票机器的问题,如果读过这篇文章,您就会了解我考察 EML OASIS 标准的动机。因为最近参加了尚在开发之中的 IEEE Project 1622(投票系统电子数据交换,Voting Systems Electronic Data Interchange,请参阅 参考资料),进一步引起了我对这方面的兴趣。实际上,OASIS EML 比 Open Voting Consortium 狭隘的示范系统范围宽广得多,甚至比将来的 P-1622 设计的范围都宽广得多。

具体地说,EML 的目标是:

  • 足够丰富,以便用于多种管辖层次的政府选举,以及不同组织类型(比如社区、团体等)的选举。
  • 允许通过多种渠道投票,包括传统的投票站(可以是电子投票)和诸如网页、电话投票、信息站之类的远程系统。
  • 支持多种表式和投票规则,比如优先级排序和累积投票。
  • 解决安全、加密和身份验证的要求。
  • 记录和传递关于投票人注册、组织成员和其他投票人元数据的信息。

EML 在欧洲政府机关和全世界的一些非政府组织得到了广泛的实际应用。

照我看来,EML 在某种程度上(但还可以忍受)具有 XML 技术(比如 SOAP、W3C XML Schema,甚至还包括 XSLT)所共有的过度设计(over-engineering)的通病。委员会倾向于在标准中规定太多的细节,考虑了太多很少遇到的情况,加入了太多中间层。当然,我本人也加入了另一个标准委员会,恐怕不久也会因为涉及特性的倍增而感到羞愧了。无论如何,我们关于 IEEE P-1622 的初步计划是从一个更简单的、由商业选举系统供应商提供(但是以非私有技术为基础)的数据模型开始,而不是照搬 EML 实现美国选举数据的标准化。对于 P-1622,我们的目标是适应政府选举的需要,而不是适应每种可能的选举场合;此外,美国 55 个州和地区之间选举过程的差异远少于欧洲议会的 45 个成员国(比方说)。虽然如此,我们已经有其他几种数据模型要结合到最终的设计中, 特性泛滥已经出现苗头。

EML 包括什么?

为了对 EML 3.0 版有直观的了解,以下给出了摘自该标准的 Executive Summary 的一段内容:

委员会的主要交付品是 Election Markup Language(选举标记语言,EML)。这是一组用 XML 模式描述的数据和消息定义。目前 EML 包括以下规范:
* 候选人提名,负责候选人列表的提名和批准。
* 选举人登记信息,包括合格的选举人名单。
* 选举人和选举办公室之间的各种通信,比如投票信息、选举通告等。
* 合法选票信息(竞选、辩论、候选人等)。
* 选举人的身份验证。
* 投票说明和投票确认。
* 选举计票和结果。
* 与其他某些已定义数据和接口有关的审计信息。

EML 的不同方面处理很多不同的数据需求。与选举过程的逻辑方面有关的模式使用数字前缀表明其一般类别。因此 400 系列模式与投票有关,500 系列与制表有关(照美国的说法是 检票),100 系列与整个选举规范有关,200 系列与候选人有关,300 系列与选举人(是否有资格等)有关。每个模式系列中都提供一个或多个 W3C XML Schema 来描述符合要求的文档。

其中包括:

  • 110-electionevent.xsd
  • 230-candidatelist.xsd
  • 310-voterregistration.xsd
  • 340-pollinginformation.xsd
  • 410-ballots.xsd
  • 420-authentication.xsd
  • 440-castvote.xsd
  • 510-count.xsd

关于命名方案和模式本身的信息,可以在 OASIS 网站上找到(请参阅 参考资料)。

除了已编号的模式家族之外,EML 还包括一些支持模式,主要用来处理通用的数据类型。比如,多数或全部 EML 都包括模式 emlcore.xsd(有时候是通过其他一些 include 间接引用的)。这样,模式中将包含如下所示的一个行:

<xsd:include schemaLocation="emlcore.xsd"/>

在 EML 核心中则包括 emlexternals.xsd,并导入了 emltimestamp.xsd 和 W3C xmldsig-core-schema.xsd。我并没有列出结合到其中的所有东西,只不过举例说明了这种方式。包括或导入上述模式的语句如下:


清单 1. emlcore.xsd 使用的外部资源
<xsd:include schemaLocation="emlexternals.xsd"/>
<xsd:import namespace="urn:oasis:names:tc:evs:schema:eml:ts"
            schemaLocation="emltimestamp.xsd"/>
<xsd:import namespace="http://www.w3.org/2000/09/xmldsig#"
            schemaLocation="xmldsig-core-schema.xsd"/>

到目前为止,一切尚好。现在来做进一步考察。模式 emlexternals.xsd 只定义了具有投票资格的公民的地址和个人信息。但是我感觉现在的包含结构是为了在将来需要的时候扩展 emlexternals.xsd 中的元素和类型定义而做准备。 emlexternals.xsd 的主文件中还有更多地包含语句:


清单 2. 导入 emlexternals.xsd 的公民信息数据类型
<xsd:import
     namespace="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"
     schemaLocation="AddressTypes-v1.xsd"/>
<xsd:import
     namespace="http://www.govtalk.gov.uk/people/AddressAndPersonalDetails"
     schemaLocation="PersonalDetailsTypes-v1.xsd"/>

当然,沿着这条路可以找到 AddressTypes-v1.xsd,其中还有其他的外部定义,但不是通过包含或导入,而是通过名称空间,比如 Dublin Core Metadata Initiative。





回页首


选票的组成

模式 410-ballots.xsd 指定了空白选票的格式。这种格式没有什么特别的地方,但值得注意的是,它包括许多通常适合选票的特性,而不仅仅适用于政府选举。比如,我不太习惯为选举/竞选资格提供一个“理由”的政府选举。但是,在这种情况下,可能需要为选举办公室提供一个理由(比如“获得了足够的连署人员数”),即使不需要将该理由显示给选举人。

模式 440-castvote.xsd 指定了具体的已填写的选票。在上一期文章所描述的开放投票联盟(OVC)设计中,为了强调两者之间的联系,我分别把根元素命名为 <ballot><cast_ballot>。与 OVC 的(初步)设计不同,EML 没有在 <Ballots><CastVote> 间建立任何特殊的联系。回想 OVC 的设计, <cast_ballot> 基本上是通过从 <ballot> 去掉不支持的选项而生成的。比方说,如果 <ballot> 包含 <contest name="Mayor"> 的几个选项, <cast_ballot> 基本上是相同的 XML 片段,只不过去掉了一个选项(候选人)。

我认为,EML 中相互独立的模式设计会造成某种陷阱,虽然影响不大。比如,在 410-ballots.xsd 中, <Options> 可以包含 <Candidate> 元素列表 或者 <Option> 元素列表。坦白地说,这样可以帮助区分政府机关选举和大选。但在 440-castvote.xsd 中,所有的选票只能是 <Option> 的列表,不能包含 <Candidate>。我认为没有理由以这种方式区分已填写选票与空白选票的语义模型(如果需要一个 XML 实例中的信息,可以从其他文档中找到;如果有冗余,那么两个地方都能找到)。

为了让您体验一下 EML,我决定提供一个 <CastVote>,将它与上一期中的 <cast_ballot> 进行匹配。我去掉了可选的安全标记和 <AuditInformation>,以便压缩示例文档。后来,我对把审查记录放在选票自身中产生了一些怀疑,因为这样可能危及到匿名性;不过我没有对此深入考察,不知道是否真正存在安全问题。但是在 IEEE P-1622 和 OVC 中,我可能把审查记录保存在单独的文档中(联邦选举委员会 可能 这样要求,但这里没有提供法律上的建议)。OVC 格式的选票如下:


清单 3. v-20081104-US-CA-Santa_Clara_County-2216-1274.xml
<cast_ballot election_date="2008-11-04" country="US" state="CA"
             county="Santa Clara County" precinct="2216"
             number="1274" serial="213" source="voting_machine">
  <contest ordered="No" coupled="Yes" name="Presidency">
    <selection writein="No" name="President">V. I. Lenin</selection>
    <selection writein="No" name="Vice President">Karl Marx</selection>
  </contest>
  <contest ordered="No" coupled="No" name="Senator">
    <selection writein="No">William Lloyd Garrison</selection>
  </contest>
  <contest ordered="No" coupled="No" name="Transportation Initiative">
    <selection writein="No">Yes</selection>
  </contest>
  <contest ordered="Yes" coupled="No" name="County Commissioner">
    <selection writein="Yes">David Packard</selection>
    <selection writein="No">Gordon Moore</selection>
    <selection writein="No">William Hewlett</selection>
  </contest>
</cast_ballot>

该选票包含一种特殊情况,美国总统和副总统,一次选择分别竞争两个不同职位的不同的候选人。议会党团的提名选举从概念上说是类似的,但是这种情况下视为一个党派而不是多个候选人投票。除此之外,我认为这段 XML 简短而意义明确。EML 版本中数据嵌套得更深,似乎不能直接处理总统选举这种情况。我认为可以这样编写代码:


清单 4. EML-20081104-US-CA-Santa_Clara_County-2216-1274.xml
<?xml version="1.0" encoding="UTF-8"?>
<CastVote xmlns="440-castvote.xsd">
<ElectionEvent>
  <Event>
    <EventName Id="n1274s213">
      Santa Clara County, CA, USA (2008-11-04)
    </EventName>
    <EventQualifier>Precinct 2216</EventQualifier>
  </Event>
  <Election>
    <ElectionName>Presidency</ElectionName>
    <Contest>
      <ContestName>President</ContestName>
      <Selection>
        <Option>
          <OptionName>V. I. Lenin</OptionName>
        </Option>
      </Selection>
    </Contest>
  </Election>
  <Election>
    <ElectionName>Presidency</ElectionName>
    <Contest>
      <ContestName>Vice-President</ContestName>
      <Selection>
        <Option>
          <OptionName>Karl Marx</OptionName>
        </Option>
      </Selection>
    </Contest>
  </Election>
  <Election>
    <ElectionName>Senate</ElectionName>
    <Contest>
      <ContestName>Senator</ContestName>
      <Selection>
        <Option>
          <OptionName>William Lloyd Garrison</OptionName>
        </Option>
      </Selection>
    </Contest>
  </Election>
  <Election>
    <ElectionName>Local Initiative</ElectionName>
    <Contest>
      <ContestName>Transportation Initiative</ContestName>
      <Selection>
        <Option>
          <OptionName>Yes</OptionName>
        </Option>
      </Selection>
    </Contest>
  </Election>
  <Election>
    <ElectionName>Local Office</ElectionName>
    <Contest>
      <ContestName>County Commissioner</ContestName>
      <Selection>
        <Option>
          <WriteinOptionName>David Packard</WriteinOptionName>
          <Value>1</Value>
        </Option>
        <Option>
          <OptionName>Gordon Moore</OptionName>
          <Value>2</Value>
        </Option>
        <Option>
          <OptionName>William Hewlett</OptionName>
          <Value>3</Value>
        </Option>
      </Selection>
    </Contest>
  </Election>
</ElectionEvent>
</CastVote>

我不能完全肯定我已经领会了 <Election><Contest><Selection><Option> 的语义,但是如果给定了元素的基数,似乎就需要这样安排。我也不完全清楚 <ElectionName><ContestName> 存在什么样的关系。





回页首


结束语

本文考察了 EML 3.0 版的一些细节,这些应该能够让您明白了该模式系统的目标是什么。具体地说,本文只是查看了与选票和投票有关的 EML 的子集,而没有涉及关于选民登记、候选人提名或者检票(与上一期相关文章对应)的那些部分。

在欧洲,EML 是一种应用相对广泛(而且还在增加)的标准,开发选举系统或者外围支持系统的编程人员都必须熟悉 EML。此外,作为 OASIS 标准,EML 当然也是组织进行内部选举时应该考虑的一种规范。在各种各样的选举中引入通用的数据格式,有助于促进工具的互操作性,其中包括专门用于审查和选举安全分析的工具。



参考资料



关于作者

David Mertz

对于 David Mertz 来说,整个世界就是一个舞台,而他的职责就是专门提供临场指导。您可以通过 mertz@gnosis.cx 与 David 联系,他的生活在 http://gnosis.cx/dW/ 上有翔实的记录。欢迎对本文、过去和将来的专栏提供意见和建议。请参阅 David 所著的 Text Processing in Python




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款