8

私はNode.jsストリームに頭を悩ませようとしています.JavaScriptとノードにかなり慣れていないわけではありません.私が本当に得た最後の言語はPerlとPHPでした:-D

私は Buffer/Streams のドキュメント @ nodejs.org を読み、James Halliday @ LXJSを見て、彼の stream-handbook と Thorsten Lorenz event-stream postを読みました。私は基本を理解し始めます:)

RDF (JSON でも XML でもない) でシリアル化されたデータを処理します。私はなんとかデータを取得し(リクエストを介して実際のコードで)、rdfstoreモジュールを使用してJSオブジェクトに解析しました。

これまでのところ、私はこれを行います:

s.createReadStream('myRDFdata.ttl').pipe(serialize()).pipe(process.stdout);

serialize()コードの解析とシリアル化を同時に行う作業は、現在どこで行われていますか。モジュールを使用throughしてストリームに接続します。

これで、さらにいくつかのメソッドができました (実際の関数宣言ではありませんが、要点を理解していただければ幸いです)。

  • getRecipe(parsedRDF)-> 解析された RDF を (JavaScript オブジェクトとして) 受け取り、その使用方法を教えてくれます
  • createMeal(parsedRDF, recipe)-> 上記の解析済み RDF とレシピを取得し、そこから新しい RDF オブジェクトを作成します
  • この新しいオブジェクトはシリアライズしてブラウザに送信する必要があります
  • (現実の世界getRecipeでは、ブラウザでユーザー インタラクションを行う必要があります)

後でコードを拡張するときの柔軟性を高めるために、これをパイプを介して連鎖させるというアイデアが気に入っています。しかし、毎回 RDF シリアライゼーションにシリアライズするのではなく、JS オブジェクトを送信するだけです。ドキュメントで読んだことから、stringifyモジュールを使用して各ステップから文字列を取得し、次のステップにパイプすることができました。しかし:

  • これは実際に意味がありますか?不必要なオーバーヘッドを追加しますか、それとも無視できますか?
  • 最初に呼び出す必要がある依存関係を持つ両方のメソッドに parsedRDF を与える方法がわかりません。getRecipeまた、出力も同様に入力さcreateMealれます。その上で私を助けるモジュールはありますか?
  • 最終的なレシピの選択をユーザーに尋ねる必要があるかもしれないので、最終的な答えを得るためにブラウザーに何かを送信する必要があるかもしれません。パイプが「待機」している間に、ソケットを介してこのようなことを行うことはできますか?

これが私がやろうとしていることを示していることを願っています。そうでない場合は、詳細/言い換えを提供しようとします。

更新:それについて寝た後、私はさらにいくつかのことを理解しました:

  • 正式なシリアル化形式がある場合、RDF のような形式を非標準のものにシリアル化することはおそらく意味がありません。したがって、使用する代わりにstringify、ステップ間で公式の RDF シリアライゼーションを渡すだけです。
  • これは、各ステップでオブジェクトを解析/シリアル化することを意味し、これにより確実にオーバーヘッドが追加されます。質問は私が気にしますか?ストリームから解析して 1 つにシリアライズするために使用する RDF モジュールを拡張できます。
  • からへの情報を追加するだけでgetRecipe、 との間の依存関係の問題を解決できます。これは、元のデータ モデルを壊すことなく、RDF を使用して非常に簡単に実行できます。しかし、パイプでこのような依存関係を処理できるかどうかを知りたいと思いますcreateMealgetRecipeparseRDF
4

1 に答える 1

6

はい、js オブジェクトのストリームを作成しても問題ありません。IO に書き込む前に、ストリームを再度シリアル化する何かを介してパイプすることを忘れないでください。

rdf を解析してシリアライズする rdfStream というモジュールを作成することをお勧めします。このように使用します。

var rdf = require('rdf-stream')

fs.createReadStream(file) //get a text stream
  .pipe(rdf.parse())      //turn it into objects 
  .pipe(transform)        //optional, do something with the objects
  .pipe(rdf.stringify())  //turn back into text
  .pipe(process.stdout)   //write to IO.

また、ノードでrdfを使用している他の人も使用できます。すばらしい!

于 2012-10-22T00:17:43.780 に答える