web-dev-qa-db-ja.com

解析に対する「プッシュアプ​​ローチ」と「プルアプローチ」とは何ですか?

プッシュ解析アプローチでは、プッシュパーサーはドキュメントの解析時に同期イベントを生成します。これらのイベントは、コールバックハンドラーモデルを使用してアプリケーションで処理できます。

これは、SAX 2.0についての本Javaを使用したPro XML Developmentに記載されているテキストです。

StAXに関しては、本は次のように述べています。

プルアプローチでは、パーサーを使用してアプリケーションの制御下でXMLドキュメントからイベントがプルされます。

強調表示されたテキストの意味は何ですか?初心者にふさわしい答えをいただければ幸いです:)

27
Little Child

基本的に、プッシュとは、パーサーがハンドラーに「私はfooを持っている、それを使って何かをする」と言うときです。プルとは、ハンドラーがパーサーに「次のfooをください」と言うときです。

押す:

if (myChar == '(')
    handler.handleOpenParen(); // Push the open paren to the handler

引く:

Token token = parser.next(); // pull the next token from the parser
35
yshavit

プッシュパーサー-イベントは、startDocument()、endDocument()などのコールバック関数の形式でAPIによって生成され、プログラマーの制御を超えています。私たちプログラマーはイベントを処理できますが、イベントの生成は制御できません。

プルパーサー-APIを呼び出すとイベントが生成されます。以下に示す例。したがって、プログラマーはいつイベントを生成するかを決めることができます。

   int eventType = xmlr.getEventType();
while(xmlr.hasNext()){
     eventType = xmlr.next();
     //Get all "Book" elements as XMLEvent object
     if(eventType == XMLStreamConstants.START_ELEMENT && 
         xmlr.getLocalName().equals("Book")){
        //get immutable XMLEvent
        StartElement event = getXMLEvent(xmlr).asStartElement();
        System.out.println("EVENT: " + event.toString());
     }
} 

、クライアントは、明示的に要求された場合にのみXMLデータを取得(プル)します。

プル解析を使用すると、クライアントはアプリケーションスレッドを制御し、必要に応じてパーサーのメソッドを呼び出すことができます。対照的に、プッシュ処理では、パーサーがアプリケーションスレッドを制御し、クライアントはパーサーからの呼び出しのみを受け入れることができます。

7
JRR

Push parsing:これは、パーサーが解析イベントをアプリケーションにプッシュする場所であり、おそらくコールバックメソッドを使用します。アプリケーションは、パーサーメソッドを呼び出した後、非同期で処理できるため、パーサーに時間がかかっても、アプリはその時点でスタックしません。解析が完了するとすぐに、パーサーはそのコールバックイベントを介してアプリをトリガーし、アプリが解析結果をさらに続行できるようにします。

pull parsing:アプリが解析イベントを待つのではなく、データをプルする場合。アプリは、要件に応じて、1つずつデータをプルできます。 StAXと同様に、アプリはnext()メソッドを繰り返し呼び出して、XMLで次の構成を取得します。

1
Ankit