AngleSharpドキュメントの日本語訳. C#で利用できるhtmlパーサーのAngleSharpプロジェクトのドキュメントの翻訳です。
このページは、Florian Rapplによって編集されました。 2015年4月21日・4改訂
拡張機能点
Extension points
AngleSharpは、一般的な、HTML5パーサを作成することを想定しています。それは、.NETの世界でアクセス可能で、完全に、管理されたコードで記述されています。しかしながら、一部のアプリケーションは、パーサを越えることを望むかもしれません。パーサーだけでは、DOMを作成するために、外部から多くの助けが必要です。
AngleSharpのユーザーに、完全なDOM実装を提供するために、AngleSharpは、本物のDOM実装でHTML5パーサを拡張します。それにもかかわらず、これは、改めて、いくつかの追加の依存関係を導入します。たとえば、HtmlAudioElementが、ソースからオーディオを再生する必要がある場合はどうなりますか?もちろん、1つは、要素のまわりで、ラッバーを記述するだけで、Sourceを読み出し、変更を管理することができます。しかし、続いて、この唯一のラッバーは、おそらく、残りのDOMと互換性がありません(そして/あるいは、異なる動作をします)
インターフェイスのフォ-ムのような外部の動作として、この不整合は、定義することによって避けることができます。インターフェイスのような、オブジェクトの実装は、おそらく、AngleSharpに登録されます。
このページでは、さまざまな拡張ポイントが、一覧にされ、説明されます。現在欠けている(しかし、企画されている)インターフェイスの概略を記されます。
IStylingServiceとIScriptingService
IStylingService and IScriptingService
スタイル(また、<link>タグの外部のスタイルシート)やスクリプト・ブロックが直面される場合、 AngleSharpは、一致エンジンを見つけようとします。たとえば、IStylingServiceの実装は、提供されたmime型を調べます。そして、関連付けられたIStyleEngineオブジェクトやnullを返します。 後者に遭遇した場合、他のIStylingServiceオブジェクトが、試されます。適切なエンジンが見つかるまで、あるいは、すべてのスタイル・サービスが、要求されます。同じアルゴリズムが、IScriptingServiceに適用されます。これらのサービスは、ファクトリー、フライウエイト・リポジトリーや結合の機能を記述しているだけです。
IStyleEngine
IStyleEngine
AngleSharpには、既にCSSパーサーが含まれています。これは、AngleSharpの設計目標の1つでした。さらに、それは、いくつかの点で(HTML)DOMは、CSSに強く結合しているため、必要とされます。1つの例は、querySelectorとquerySelectorAllメソッドです。これらのメソッドには、CSSパーサー(あるいは、少なくともCSSセレクタ・パーサ)が必要です。結局は、特定の要素に一致するオブジェクトが生成されます。
それにもかかわらず、HTMLブラウザは、CSS以外のスタイリングの可能性を知っていても、いなくてもよい。現在、(例えば、type属性のtext / cssを指定することが無ければ)CSSが、既定で使用されています。しかしながら、特定の(あるいは、複数の)型のスタイル・パーサーを登録することができます。この方法の後、また、カスタムCSSパーサーを登録することも可能です。現在提供されているものを上書きします。
IScriptEngine
IScriptEngine
AngleSharpは、デフォルトで、スクリプト・エンジンを提供していません。もちろん、JavaScriptが、Webのプログラミング言語であるため、どんなJavaScriptエンジンでも、すばらしい追加になるでしょう。
しかしながら、現在、公式/統合ソリューションを提供する意図はありません。解決法が含まれている、AngleSharp.Scriptingプロジェクトは、そのような拡張機能を記述することが、どれくらい簡単か説明するためのサンプル・プロジェクトです。
最後に、私たちは、C#をスクリプト言語として使用できるようにする必要があります。これは、確実にできます。スクリプトや他の解決法(Roslyn?)でもバックアップされています。これは、大きな追加になるでしょう。それは、また別のものかもしれません。長い目で見れば、AngleSharpが、複数のスクリプト用エンジンをサポートすることは、素晴らしいことです。
スクリプト用エンジンを登録して、スクリプト用機能を提供することは、靴の二つの異なる対です。AngleSharpは、スクリプトが実行される前に、(スクリプト・エンジンが、利用可能であるかどうかに関係なく)スクリプトを起動するためのユーザーが必要です。
ISpellCheckService
ISpellCheckService
それぞれのスペルチェッカーの登録を可能にします。各スペルチェッカーは、そのカルチャに登録されており、どのカルチャにも敏感です。Webページやテキストは、おそらく、使用します。
単語が、適切につづられているか、単語の適切なつづりのための、提案を取得している場合、APIは、実行しているクエリの特定の単語を無視できます。現在、APIは、同期して実装されていますが、将来は、完全に非同期のより優れたバージョンに切り換えるかもしれません。
IResourceService
IResourceService
この拡張機能は、さまざまなインターフェイスで実装されています。ほら:
- HtmlAudioElementのためのIAudioService
- HtmlVideoElementのためのIVideoService
- HtmlImageElementのためのIImageService
- HtmlObjectElementのためのIObjectService
基本的な考え方は、含まれているリソースの特定のプロパティを決定することです。IResourceInfoの専門化の実装は、寸法とより多くの画像のリソースに依存する情報をもたらします。HtmlAudioElementの場合、完全なメディア・コントローラーが、適切に実装されています。メディア・ストリームの再生ができます。
HtmlObjectElementの場合、これは、Adobe Flashなどのような、プラグインに直接つながります。 言うまでもなく、AngleSharpコアは、これらの非常に特殊なタスクの役割を果たしません。
INavigatorService
INavigatorService
与えられたIWindowインスタンスのためのINavigatorインスタンスを作成します。INavigatorは、最初は、かなり一般的なようです。しかしながら、それは、特にメディア・リソースを呼び出す観点から、根底にあるIWindowインスタンスに、本当に専門化することができます。(例えば、ウェブカメラやマイク)。
AngleSharpは、より適切で特殊な実装の余地を残すために、インタフェースを実装していません。 また、外部周辺機器でユーザー体験を強化する前に述べた機能は、魅力がありそうです。
IHistoryService
IHistoryService
IHistoryServiceは、ブラウジング・コンテキストで関連付けられる、新しいDOM IHistoryオブジェクトを作成するための機能を記述します。ブラウジング・コンテキストは、インタフェースによって記述されたコンストラクタ関数に渡されます。
IWindowService
IWindowService
更に専門化して役に立つ方法で実装することができた、複数のDOM要素があります。重要な要素は、IWindowの実装です。それは、すべてのDOM相互作用が、IWindowに依存していないIDocumentを必要とするため、直接、必要とされていません。しかしながら、特にスクリプト環境では、 IWindowインスタンスは、極めて重要な役割を満たします。
レンダリングのような、より高度な筋書きのために、IWindowインターフェイスのカスタム実装は、重要と思われます。その結果、与えられたサービスは、ユーザーに、カスタムIWindow作者を登録するための機能を与えます。備考:現時点では、カスタム作者のようなものは、少なくともEventTargetから、継承する必要があります。(それは、IEventTargetを実装する)。将来は、この必要条件は、うまくいけば省略されます。
ILoaderService
ILoaderService
AngleSharpの読み込み文書やリソースは、完全にカスタマイズすることができます。メインのインターフェイスは、2つのコンストラクタ関数を定義するILoaderServiceです。新しいIDocumentLoaderを作成する1つのコンストラクタ関数、そして、新しいIResourceLoaderを作成する別のコンストラクタ関数。前者は、ブラウジング・コンテキストのコンテキストで、実際のドキュメントを読み込むために使用されますが(したがって、最大値があります。IBrowsingContextごとに1つのIDocumentLoader)、後者は、IDocumentのコンテクストの読み込みリソースのために使用されます。言うまでもなく、私たちは、IDocumentごとに最大1つのIResourceLoaderが必要です。
このアーキテクチャには、2つの大きな利点があります。:
- 役割が、明白に切り離されています。そして、(メインやドキュメントの)すべてのコンテキストは、それらの自身の要求を追跡することができます。
- すべてのドキュメントの読み込み/フォ-ムの送信に影響することなく、(特定の要素の場合でも)リソースの読み込みをオフにすることは簡単です。
また、リソース、および/あるいは、ドキュメントの読み込みをオンやオフに切り替える、ブーリアン・プロパティを持っている、LoaderServiceと呼ばれるデフォルトの実装が、あります。デフォルトの実装は、利用可能なリクエスターが使用されます。