履歴書に XML 構造を追加する

HR-XML、スタイルシート、フォーマット・オブジェクト、名前空間を活用する

この記事では、XML による構造を使用して履歴書関連のデータを格納する方法を探ります。HR-XML プロジェクトと OAGIS (Open Applications Group Integration Specification) プロジェクトの要素を使用してデータ・ファイルとスタイルシート・ファイルを作成し、Apache FOP (Formatting Objects Processor) を使用して履歴書のサンプルを PDF ファイルとして生成します。特に興味深い点として、複数の名前空間を扱う方法、スタイルシートを使って基本的な PDF に装飾を追加する方法についてのヒントを説明します。

Colin Beckingham, Writer and Researcher, Freelance

Colin Beckingham はカナダのオンタリオ州東部に住むフリーランスの研究者であり、ライターであり、プログラマーでもあります。キングストンの Queen's University で学位を取得している彼は、園芸、競馬、教育、行政サービス、小売業、旅行/観光業などにも関わってきました。彼はデータベース・アプリケーションの作成者であり、数え切れないほどの新聞記事や雑誌記事、オンライン記事を執筆しており、また Linux でのオープンソース・プログラミングや VoIP、音声制御アプリケーションも研究しています。



2011年 2月 01日

WYSIWYG (What You See Is What You Get) エディターを使用すれば短時間で容易に履歴書を作成することができ、また何回かマウスをクリックするだけで、その履歴書を PDF ファイルに変換して希望の求人元に送信することができます。では、そもそもなぜ、余分な手間をかけてデータを XML ファイルに格納する必要があるのでしょう。余分なステップによってプロセスが複雑になると、エラーが発生しやすくなります。そのため、余分な手間をかける場合には、それに見合うだけの理由が必要です。

よく使われる頭文字語

  • PDF: Portable Document Format
  • URL: Uniform Resource Locator
  • W3C: World Wide Web Consortium
  • XML: Extensible Markup Language

XML ファイルを使用するのに見合う理由としては、データと表示とを分離することができ、XML などのバックエンドによって導入される構造がメリットをもたらすことが挙げられます。データが一層複雑になり、出力要件が多様な状況では、XML を使用することで正確性、移植性、そしてさまざまな状況への適応性が高くなります。データの扱いにこだわりがある人は、あらゆるデータを何らかのデータベースに格納しようとします。単純な履歴書のために複雑なデータ構造を導入することが過剰であるかどうかは、それだけのニーズがあるかどうか、そしてどの程度頻繁にデータが変更されるかに依存します。

多くの求人元は不完全な履歴書に対して否定的な反応を示します。構造を導入すれば、文書の中に含まれていなければならない内容を要素によって明らかにすることができます。XML は多種多様なプラットフォームに使用することができます。また XML データによる 1 つのバックエンドにより、略歴または詳細な職務経歴のいずれに関しても、異なるスタイルシートを使用するだけで求人元の要件に対応することができます。

必要なプロセス

この記事で説明するプロセスでは、Apache FOP (「参考文献」を参照) と XSL (Extensible Stylesheet Language) スタイルシートを使って XML データ・ファイルから PDF ファイルを生成します。XSL スタイルシートは W3C のドキュメントに記述された標準的なフォーマットに従って、データの表示を制御します (「参考文献」を参照)。

履歴書データを格納するためのフォーマットとして、独自のユニークなスキーマを使用する単純な XML フォーマットを使用することもできますが、HR-XML のような標準的なフォーマットを使用するメリットもあります。つまり標準的なフォーマットを使用すれば、履歴書に必要な標準的なものは標準から引用し、標準によってカバーされていない特別な要件がある場合には、その要件のために専用の名前空間を作成し、そこに内容を追加することで拡張するだけの簡単な話です。

HR-XML と OAGIS

HR-XML と OAGIS (「参考文献」を参照) は 2 つのオープンソース・プロジェクトです。この 2 つを組み合わせることで、大規模な組織の多くが人事およびビジネスの面において重要と考える構造を提供することができます。

HR-XML は人事分野の専門家によって深く考えられた結果を反映しています。これらの専門家は求人側の視点から問題を見ています。そのためHR-XML のスキーマには、面接の段階に必要な情報をはるかに上回る情報のための土台が含まれています。人の管理は複雑な仕事です。求人要件を決定し、求人活動、経歴審査、コンピテンシー評価、そして実際の雇用を行うことから、採用後に継続的に行われる、勤務時間報告と給与管理、福利厚生管理、業績目標管理、人事評価に至るまで、HR-XML の提供するスキーマはすべてをカバーしています。

HR-XML は人事業界に特化していますが、OAGIS は業界にまたがるデータ交換のための標準を目指しています。OAGIS は多種多様な業界全般に共通のアイデアや概念を扱いますが、業界特有の要素に関しては、その業界の専門知識を持つ専門家グループに任せるようになっています。

HR-XML では、より広範な OAGIS の一連の要素によって既に作成されている概念を再び作成することがないように十分な注意が払われており、HR-XML は単に独自の名前空間に新しい内容を追加しているにすぎません。その結果、HR-XML のスキーマは、人事というコンテキストで格納する必要があるもの (要素) と、その格納方法 (属性、階層構造) をベースに作られています。そのため、HR-XML の成果を活用することには大きなメリットがあります。HR-XML で使用されるスキーマの詳細については、そのスキーマをダウンロードするか、あるいは Web サイト (登録が必要) を表示して調べてください。バージョン 3.1 のダウンロードの場合、Candidate 要素に関連する文書へのパスは以下のとおりです。

.../HR-XML-3_1/org_hr-xml/3_1/Documentation/Guidelines/ch21.html#id564065

オンラインで調べる場合、出発点として適切な URL は以下のとおりです。

http://ns.hr-xml.org/schemas/org_hr-xml/3_1/Documentation/ComponentDoc/Candidate-noun.php

データ・ファイル

リスト 1 は基本的なデータ・ファイルの一例です。このファイルは大規模なファイルの一部であり、Candidate 要素とその子を使用しています。

リスト 1. データ・ファイルの例
<?xml version="1.0" encoding="UTF-8"?>
<hr:Candidate 
  xmlns:hr="http://www.hr-xml.org/3" 
  xmlns:ccts="urn:un:unece:uncefact:documentation:1.1" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:oa="http://www.openapplications.org/oagis/9">
  <hr:DocumentID>000000001</hr:DocumentID>
  <hr:CandidatePerson>
    <hr:PersonName>
      <hr:FormattedName>Blimpo Togwer</hr:FormattedName>
      <oa:GivenName>Blimpo</oa:GivenName>
      <hr:FamilyName>Togwer</hr:FamilyName>
    </hr:PersonName>
    <hr:Communication>
      <hr:ChannelCode>Mail</hr:ChannelCode>
      <hr:Address>
        <oa:AddressLine sequence="1">5555 Yellow Brick Road</oa:AddressLine>
        <oa:AddressLine sequence="2">RR #1</oa:AddressLine>
        <oa:CityName>Lesser Village</oa:CityName>
        <oa:CountrySubDivisionCode>KKK</oa:CountrySubDivisionCode>
        <hr:CountryCode>XX</hr:CountryCode>
        <oa:PostalCode>AAA BBB</oa:PostalCode>
      </hr:Address>
    </hr:Communication>
  </hr:CandidatePerson>
</hr:Candidate>

このコード・フラグメントは完全なものですが、例としては単純です。この例から以下のような詳細事項がわかります。

  • XML 宣言の後にルート要素としての Candidate があります。
  • この場合の Candidatehr という接頭辞で表される hr 名前空間で定義される意味を持っています。
  • hr 名前空間は http://www.hr-xml.org/3 というラベルと関連付けられています。
  • 各要素の前には名前空間のラベルが付けられており、その要素で表現されるものに関するあらゆる曖昧さを排除しています。
  • 要素には hr 名前空間 (HR-XML) で定義されているものと、oa 名前空間 (OAGIS) で定義されているものがあります。それらの要素が必要に応じて混在しています。
  • CountryCode には USFR のような 2 文字のコードが必要です。
  • CountrySubDivisionCode は、ある国の州、省、その他の主要行政区域を表現しています。
  • 階層構造は重要です。例えば都市名までたどるためのパスには、Candidate > CandidatePerson > Communication > Address が含まれます。

オンラインの HR-XML スキーマ・リソースを使用すると、追加で使用可能な要素の名前 (CandidateProfile など) を得ることができます。これらの要素を使用すると、CandidateObjectiveEducationHistoryPublicationHistoryCertifications などのさらなる情報を追加することができます。

名前空間

名前空間は XML 要素の名前を指定する際に生ずる曖昧さに対応するための構造です。名前空間の基本を詳しく説明した資料については「参考文献」を参照してください。名前空間により、整然とした構造を強制することができます。ただし、正しいデータを確実に取得するには、名前空間を注意深く使用する必要があります。不注意に名前空間を使用するとエラーが発生する可能性があり、エラーの多くは気付かないうちに発生しています。例えば、名前空間を指定せずに education セクションを参照した場合、データが見つからないためプロセッサーがそのセクションに何も出力せず、警告も出さない可能性が十分にあります。

編集

XML ファイルを変更する場合には、データ・ファイルもスタイルシートも純粋な XML であるため、皆さんのお気に入りの XML エディターまたはテキスト・エディターを使用することができます。例えば、Eclipse (「参考文献」を参照) で新しいプロジェクトを開き、リスト 1 のコードをコピーして新しい文書に貼り付け、編集すると、構造化された履歴書データ・ファイルを作成することができます。

スタイルシート

スタイルシートの作成方法と使用方法についてのチュートリアルを選択するには、W3C XSL の Web ページ (「参考文献を参照) を参照してください。

リスト 2 は履歴書のための基本的なスタイルシートの一例です。

リスト 2. スタイルシートの例
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:fo="http://www.w3.org/1999/XSL/Format" 
  xmlns:oa="http://www.openapplications.org/oagis/9"
  xmlns:hr="http://www.hr-xml.org/3">
<xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <fo:root>
      <fo:layout-master-set>
        <fo:simple-page-master master-name="page1">
          <fo:region-body margin="1in" />
        </fo:simple-page-master>
      </fo:layout-master-set>
      <fo:page-sequence master-reference="page1">
        <fo:flow flow-name="xsl-region-body">
          <fo:block text-align="right" font-size="12pt" font-family="serif">
            DocumentID: <xsl:value-of select="hr:Candidate/hr:DocumentID" />
          </fo:block>
          <fo:block>
            <fo:leader leader-pattern="dots" leader-length="100%" />
          </fo:block>
          <fo:block font-size="12pt" font-family="serif">
            Curriculum Vitae - Résumé
          </fo:block>
          <fo:block font-size="20pt" font-family="Arial" font-weight="bold">
            <xsl:value-of 
              select="hr:Candidate/hr:CandidatePerson/hr:PersonName/hr:FormattedName" />
          </fo:block>
          <fo:block font-size="12pt" font-family="serif">
            Contact
          </fo:block>
          <xsl:for-each 
        select="hr:Candidate/hr:CandidatePerson/hr:Communication[hr:ChannelCode='Mail']">
            <fo:block font-size="10pt" font-family="Arial" font-weight="normal">
              <xsl:value-of select="hr:Address//oa:AddressLine[@sequence=1]" />, 
                <xsl:value-of select="hr:Address/oa:AddressLine[@sequence=2]" />
            </fo:block>
            <fo:block font-size="10pt" font-family="Arial" font-weight="normal">
              <xsl:value-of select="hr:Address/oa:CityName" />, 
                <xsl:value-of select="hr:Address/oa:CountrySubDivisionCode" />
            </fo:block>
            <fo:block font-size="10pt" font-family="Arial" font-weight="normal">
              <xsl:value-of select="hr:Address/oa:PostalCode" />, 
                <xsl:value-of select="hr:Address/hr:CountryCode" />
            </fo:block>
          </xsl:for-each>
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xsl:template>
</xsl:stylesheet>

リスト 2 の命令はリスト 1 のデータをページ上に表示する方法を制御しています。ここでは以下の制御が行われています。

  • この文書には 4 つの異なる名前空間が必要です。データを参照する場合には必ず各ノードで明示的に名前空間を指定しています。これにより、デフォルト名前空間を許可した場合に、接頭辞が使用されないために生じる可能性がある名前空間の混乱を回避することができます。
  • テンプレートの突き合わせはスラッシュ (/) によって行われます。これはデータ文書のルート要素で検索が開始されることを示しています。
  • このスタイルシートはレイアウト・マスター・セットを規定しており、それによって文書全体のページ群を定義し、次に個々のページのページ・シーケンス要素を定義しています。
  • 各ページには一連の block 要素が必要です。この要素により、ページ上のどこに項目を配置するか、また項目の表示方法 (フォントやフォントサイズなど) をプロセッサーに指示しています。
  • このスタイルシートは for-each 文を使用して要素グループに繰り返し処理を行っています。例えばコミュニケーションのチャンネルは複数あるかもしれません (郵便、E メール、電話、等々)。角括弧 ([]) を使用することで、フィルターを規定することができます。この例の場合には、スタイルシートによって Mail 項目のみを抽出するようにフィルタリングしています。

Apache FOP を使用した出力

Apache FOP はデータ・ファイルとスタイルシートとを組み合わせて PDF を生成します。FOP は PDF 出力専用のものではなく、RTF (Rich Text Format)、PCL (Printer Command Language)、PS (PostScript)、AFP (Advanced Function Presentation)、TIFF (Tagged Image File Format)、PNG (Portable Network Graphics) などのファイルやプレーン・テキスト・ファイルも生成することができます。

FOP を入手してインストールするには、単にバイナリー・バージョンをダウンロードして解凍します (「参考文献」を参照)。あとはダウンロードして解凍した場所から FOP を実行することができます。

下記は fop のコマンドラインでの命令の例です。この例では、データ、スタイル、構成ファイルが 1 つのディレクトリーにあります。そのディレクトリーをワーキング・ディレクトリーとし、そのワーキング・ディレクトリーから fop を呼び出すことができます。

/path/to/fop/fop -c fop.xconf -xml exx.xml -xsl exx.xsl -pdf exx.pdf

このコマンドは fop 実行可能ファイルに対し、以下の内容を実行するように指示しています。

  • fop.xconf ファイルの中で構成情報を検索する
  • exx.xml ファイルの中でデータを検索する
  • exx.xsl スタイルシートを使用して exx.pdf 出力を生成する

構成ファイルは重要であり、形式はリスト 3 のようになっています。

リスト 3. FOP 構成ファイル
<?xml version="1.0"?>
<fop version="1.0">
  <base>.</base>
  <source-resolution>72</source-resolution>
  <target-resolution>72</target-resolution>
  <default-page-settings height="11in" width="8.26in"/>
  <renderers>
    <renderer mime="application/pdf">
      <filterList>
        <value>flate</value>
      </filterList>
      <fonts>
        <auto-detect />
      </fonts>
    </renderer>
  </renderers>
</fop>

この構成では、filterlist 要素は PDF 出力の中にオブジェクトを圧縮する方法を制御し、fonts 要素はプロセッサーに対し、オペレーティング・システムが既に認識しているフォントを使用するように指示しています。

図 1 はこれまでに挙げたリストによる出力を PDF リーダーで読み取った画面のスクリーン・キャプチャーです。この画面を見ると変換を実行した結果がわかります。

図 1. PDF 出力
文書 ID、名前、連絡先情報を含む PDF 出力のスクリーン・キャプチャー

PDF の装飾

スタイルシートには以下の単純な装飾項目を含むことができます。

  • 例の中に一連のドットを表示することができます。そのためには以下のコードによってドットを生成します。
    <fo:block>
      <fo:leader leader-pattern="dots" leader-length="100%" />
    </fo:block>
  • 空白行を表示することができます。そのためには、Nicholas Chase 氏による developerWorks の記事 (「参考文献」を参照) にヒントとして説明されている手法、または以下のコードを使用します。
    <fo:block>&#160;</fo:block>

FOP のドキュメントには、枠線、マージン、パディング、色、画像、表など、さらに他の装飾についても説明されているので参考にしてください (「参考文献」を参照)。

まとめ

XML ファイルから履歴書や職歴書を生成するためには少し余分な作業が必要ですが、XML ファイルによって整然とした構造を強制することができるため、必要に応じて可能な限り文書を完全なものにすることができます。

テキスト・エディターを使用して文書を作成する方法は、単純な状況においては相変わらず有効です。それに代わる方法として、さまざまなバージョンの履歴書の共通の情報ソースとして XML ファイルを使用すると、より複雑なデータ・ソースにも適応することができます。選択肢としては、「マークアップを使用して 1 つの文書の複数のコピーをエディターの中に一緒に保持する方が効率的か、それとも同じデータに適用するスタイルシートを複数保持する方が効率的か?」ということになります。どちらの方法でも結果は同じになる場合が多いのですが、結果を得るための過程は異なります。

参考文献

学ぶために

  • XML設計の原則: 注意してXML名前空間を使用する」(Uche Ogbuji 著、developerWorks、2004年4月) は XML の設計に名前空間を採用する場合のために、名前空間を扱う上での困難さと問題を最小限にとどめる方法について解説しています。
  • ヒント: XSLTスタイルシートの空白を制御する」(Nicholas Chase 著、developerWorks、2002年11月) では、ホワイトスペースについて、さらには変換中に空白が削除されてしまう問題について解説し、また望むとおりの文書を作成する方法について解説しています。
  • XSLTのコーディングを改善する5つの方法」(Benoît Marchal 著、developerWorks、2001年1月) では変換の際に役立つ 5 つの手法として、(HTML実体を含めて) CSS と XSLスタイルシートとを併用する方法、クライアント・サイドの JavaScript を使用する方法、複数の入力文書を処理する方法、XSLT を使って自動的にスタイルシートを生成する方法を解説しています。
  • Apache FOP のサイトで、このプリント・フォーマッターについて学んでください。Apache FOP は XSL-FO (XSL formatting objects) を利用した、出力に依存しないフォーマッターです。
  • Apache FOP Compliance Page を訪れ、FOP 文書でどんなフォーマット設定が可能かを調べてください。
  • Open Applications Group の Web サイトを訪れ、この標準開発組織について調べてください。Open Applications Group ではプロセス・ベースのビジネス標準を構築しており、その対象には、e-コマース、クラウド・コンピューティング、SOA (Service Oriented Architecture)、Web サービス、エンタープライズ統合などが含まれています。
  • OASIS (Organization for the Advancement of Structured Information Standards) のサイトで、この組織について学んでください。
  • XSL のサイトで、XML 文書の変換と表示の定義に関する一連の勧告について調べてください。
  • 著者の Colin Beckingham が developerWorks に寄稿した他の記事も読んでください (2009 年 3 月から現在まで)。XML、音声認識、XHTML、PHP、SMIL、その他の技術が解説されています。
  • developerWorks の XML ゾーンには、XML の領域でのスキルを磨くためのリソースが豊富に用意されています。
  • My developerWorks で developerWorks のエクスペリエンスをパーソナライズしてください。
  • developerWorks の XML ゾーンを XML の技術ライブラリーとして利用してください。広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、および IBM Redbooks などが用意されています。また、他にも XML に関するヒント記事があります。
  • developerWorks の Technical events and webcasts で最新情報を入手してください。
  • developerWorks on Twitter で、今すぐ Twitter に参加して developerWorks のツイートをフォローしてください。
  • developerWorks podcasts でソフトウェア開発者のための興味深いインタビューや議論を聞いてください。
  • developerWorks On demand demos をご覧ください。初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。

製品や技術を入手するために

  • オープンソースの XML 開発環境、Eclipse を試してみてください。
  • IBM ソフトウェア評価版ダウンロードで、DB2、Lotus、Rational、Tivoli、WebSphere などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source
ArticleID=629710
ArticleTitle=履歴書に XML 構造を追加する
publish-date=02012011