SharePoint のドキュメント パーサー
こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、SharePoint のドキュメント パーサーについてご説明します。
ドキュメント パーサーとは
ドキュメント パーサーは標準で有効化された、ファイル内に持つプロパティ情報と、SharePoint のアイテムが持つフィールド情報を同期しようとする仕組みです。
私たちは何気なくドキュメントをアップロードしていますが、SharePoint サイトにファイルをアップロードし、プロパティの編集画面を経ると、前後でファイルのバイナリを比較すると細かな差異が確認できることに気づきます。
これは、ファイルのアップロード後にプロパティの編集画面で、コンテンツ タイプを選択したり列情報を書き込んだりすると、ファイル 内部にドキュメント ライブラリのスキーマに合わせてプロパティ データが格納されることに起因します。
主に、データの同期の方向性に応じて、2 つの用語がありますので、以下に記載します。
1. 昇格ドキュメント (バイナリ) の持つプロパティ情報をアイテムのフィールド (メタデータ) にコピーします。
2. 降格
アイテムのフィールド (メタデータ) をドキュメント内のプロパティ (バイナリ) にコピーします。
基本動作として、ファイルをアップロードした時に 1. 昇格、アイテムのプロパティを書き換えた際に 2. 降格が発生します。
ただし、それ以外にも変則的な条件で動作する例として、リストの列定義などのスキーマ情報が変更された後で、ファイルが最初にダウンロードされたときなどにも整合性を保とうとして同期処理が動きます。
同期する対象の列は、SharePoint 側に存在する列のみです。SharePoint のコンテンツ タイプまたはライブラリの列に存在しない列情報は同期されません。ドキュメント パーサーはライブラリ側に列を自動で作成することはしません。
SharePoint は、メタデータとしてデータを保持した方が、アプリケーションとして連携しやすいことは容易に想像できます。リストビューからの絞り込みやソート、ワークフロー、管理プロパティを使用した検索など、毎回ファイルのバイナリ データを読み取って処理を実施する場合、このレベルでの汎用的なドキュメント管理ソリューションの実現は不可能だと想像できます。
なお、このドキュメント パーサーを使用したアイデア ソリューションは、過去に本ブログにも投稿がありますので、ご紹介します。
タイトル : Excel 2013 セルと SharePoint ドキュメント ライブラリ列の連携方法
アドレス : https://blogs.technet.com/b/sharepoint_support/archive/2014/06/27/excel-2013-sharepoint.aspx
また、ドキュメント パーサーは、ドキュメント内にあるハイパーリンクを代替アクセス マッピングを使用して調整するなど、他にも様々な動作を実施しています。
ドキュメント パーサーが登録されているファイルの種類
SharePoint は、ドキュメント パーサーを前提の機能として様々な仕組みを実装しています。ドキュメント パーサーは拡張子ごとに専用のドキュメント パーサー (COM オブジェクト) が登録されています。
上記は拡張・取り外し可能なドキュメント パーサー (SPWebService.PluggableParsers) の一覧です。
以下に標準でドキュメント パーサーが登録されている拡張子を列挙します。
・Office ファイル (97-2003 形式, OpenXML 形式) ・*.css, *.js ・*.html, *.mthml ・*.xml, *.udcx (InfoPath など) ・*.dwp, *.webpart, *.stp, *.wsp (ギャラリーに保存するファイル) ・画像ファイル・*.xfp・その他
下記に、製品に組み込まれている特筆すべきパーサーを記載します。
XML ファイル
InfoPath XML がドキュメント パーサーに依存して XML データ内のフィールドとアイテム列を連携していることは想像できた方も多いと思います。
ただし、SharePoint は XML ファイルのアップロード時に、さらに該当ファイルが InfoPath で生成した XML ファイルであるかどうかを確認し、InfoPath であると判断できる場合はアイテムの ProgId をアイテムの列に登録することも実施しています。
XML はアプリケーションごとに様々な定義があるため、定義ごとにファイルを開くことのできるアプリケーションは多数存在します。この処理が動作しなければ、エクスプローラが担っているように、ドキュメント ライブラリがファイルの内容から、XML ファイルを開くアプリケーションを区別できません。この処理が実行されなければ、ドキュメント ライブラリに表示されるファイルのアイコンも標準のものになってしまいます。
その他、ドキュメント パーサーを効果的に利用している機能として、フォーム ライブラリのドキュメントへの再リンク機能があり、ドキュメント パーサーを使用し、TemplateUrl 列に *.xsn ファイルへの URL を一括で書き込むことで、*.xml ファイルの本文にある *.xsn ファイルへのパスを間接的に更新できるよう実装されています。
STP, WSP, WEBPART, UDCX ファイル
意外だと思われる拡張子として、SharePoint がシステム上使用するリスト テンプレート ファイル (*.stp), サイト テンプレートおよびサンドボックス ソリューション (*.wsp), Web パーツ ファイル (*.webpart)、データ接続ファイル (*.udcx) などがあります。
実はドキュメント パーサーが、それぞれリスト テンプレート ギャラリー、ソリューション ギャラリー、Web パーツ ギャラリー、データ接続ライブラリにアップロードした際に、これらのファイルからメタデータを各ギャラリーの列に登録しています。この値が書き込まれないとただのファイルとしてライブラリに格納されているだけとなり、リスト、サイト、ソリューション、Web パーツ、データ接続ファイルを使用できない結果となります。
その他
サード パーティのドキュメント ビューアを開発している開発者が、SharePoint 上でのドキュメント管理機能を実装したい場合、カスタム ドキュメント パーサーを開発することもできます。
この開発は On-Premises のみです。詳細な開発手法は割愛しますが、開発方法としてはISPDocumentParser インターフェイスを継承した COM コンポーネントを登録し、SharePoint Server 2010 以降ではSPWebService.PluggableParsers に定義を登録します。SharePoint 2007 の時には docparse.xml に定義を記載します。
ドキュメント パーサーの ON/OFF について
PowerShell を使用して、サイト単位でドキュメント パーサーを無効にすることは可能です。
この設定変更を実施する目的としては、アイテム・フォルダに対するプロパティの変更、承認・却下などの操作によりエラーが発生した場合や、ファイルの内容が意図せず書き換わってしまった際に切り分けや一時回避策として使用する際に有効となります。
もちろん、ドキュメント パーサーを使用せず、純粋にドキュメントをドキュメント ライブラリ上でアップロードされたままのファイルを格納したいというご要件の場合にも有効となるでしょう。
(注意) SharePoint Online では、本設定を変更することはできません。
1) サイト単位ですべてのパーサーを OFF にする方法
SharePoint 管理シェルを起動して、以下のコマンドを実行します。
$web = Get-SPWeb https://sharepoint/sites/siteA/subsiteB
$web.ParserEnabled = $false
$web.Update()
ただし、ドキュメント パーサーは多くの機能の前提条件になります。影響範囲を考慮するにあたっては、ドキュメント パーサーが同期するファイルの種類は、前項に記載した通り多岐に渡ることを念頭に置く必要があります。
特に、SharePoint サイト管理に重要なギャラリー等が使用できなくなることを考慮すると、サイトコレクションの様々な機能が集中するトップ サイトでの無効化は避けたいところです。
例えば、ドキュメントをストアすることを目的としたドキュメント ライブラリのみを持つサブ サイトなどであれば、比較的このような設定変更は影響を抑えられると考えられます。
2) ファーム全体で特定の拡張子に対するパーサーを OFF にする方法
SharePoint 管理シェルを起動して、以下のコマンドを実行します。
$webservice = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$webservice.PluggableParsers.Remove("docx")
$webservice.Update()
適用範囲がファーム全体になります。SharePoint が使用するギャラリー等への影響を防ぐことができますが、ファーム全体で OFF にするということが適切かを事前に確認する必要があります。
まとめ
ドキュメント パーサーの動作を把握したり、設定変更を試みる場面はトラブルシューティングに限られると思います。しかしながら、必要となった場合には本投稿をご活用くださいますようお願いいたします。
最後に本投稿を作成するのに参照したページを下記に記載します。
タイトル :ドキュメント プロパティの昇格と降格
アドレス : https://msdn.microsoft.com/ja-jp/library/aa543341(v=office.14).aspx
タイトル : カスタム ドキュメント パーサー
アドレス : https://msdn.microsoft.com/ja-jp/library/aa544149(v=office.14).aspx
タイトル :ドキュメント情報パネルとドキュメント プロパティ
アドレス : https://msdn.microsoft.com/ja-jp/library/bb447589(v=office.14).aspx
タイトル :ドキュメント プロパティとコンテンツ タイプ
アドレス : https://msdn.microsoft.com/ja-jp/library/bb447539(v=office.14).aspx
今回の投稿は以上になります。