問題タブ [hxt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
xml - 値のリストを抽出するための Haskell HXT
XPathと矢印を同時に使用してHXTを理解しようとしていますが、この問題をどのように考えるかについて完全に固執しています。次の HTML があります。
これを HXT XmlTree に抽出しました。私がやりたいことは、関数を定義することです(私は思いますか?):
として使用するとgetValues ["c1", "c2", "c3", "c4"]
、次のようになります。
助けてください?
haskell - Haskell HXT を IO の外で実行していますか?
これまで見てきたすべての例では、Haskell XML ツールキット HXT を使用runX
してパーサーを実行していました。runX
IO モナド内で実行されます。この XML パーサーを IO 以外で使用する方法はありますか? 私には純粋な操作のように思えますが、なぜ私が IO の中にいることを余儀なくされているのか理解できません。
xml - 矢印を折りたたんで一覧表示
HXTに問題がありますが、矢印については何かが足りないのではないかと思います。
私は次のようなXML構造を持っています
そして内部構造のような
矢印のステップで要素を収集する方法はありますか?
getXmlDataの再帰呼び出しでは、回答を収集してXmlListコンストラクターでラップする必要がありますが、用語を収集する方法がわかりません。現在、私は出力のいくつかの後処理(同じ名前で収集)でこれを達成していますが、より良い解決策が欲しいです。
haskell - HXT: 左因数分解の非決定論的矢印?
私は Haskell の XML ツールボックス ( HXT ) を理解しようとしていますが、計算ツールとしての矢印を完全に把握していないように見えるため、どこかで壁にぶつかっています。
GHCiセッションを使用してもう少しよく説明したいと思っていた私の問題は次のとおりです。
したがって、Parse は、単純な XML ドキュメントに与えた矢印を適用する小さなヘルパー関数です。
別のヘルパー関数を定義します。今回は、指定された名前のノードの下にあるテキストを抽出します。
この関数の助けを借りて、&&&
コンビネータを使用して 2 つの異なるノードのテキストをペアにし、それを次のようにコンストラクタに渡すのは簡単です。
ここで、私が理解できない部分が来ます: 私は左因数分解したい! ルートノードを 2 回extract
呼び出します。getChildren
代わりに、一度だけ呼び出したいです! だから私は最初にルートノードの子を取得します
それが問題かどうかを調べるために、たとえば isElem などの呼び出しの順序を変更しようとしたことに注意してください。しかし、現状では、これが機能しない理由がわかりません。Haskell wiki には「チュートリアル」という矢印があり、私がそれを理解した方法では、その方法でやりたいことを実行できるはず&&&
です。つまり、2 つの計算の結果をペアにするために使用します。
それも機能しますが、「共有」したい結果がすでにある場合は、途中の谷ではなく、矢の連鎖の開始時にのみ. 通常の関数合成とアロー表記の考え方の違いに頭を悩ませているだけな気がします。私はどんな指針にも非常に感謝しています!(Haskell-wiki よりももう少し詳細な一般的な矢印のチュートリアルであっても。)
ありがとうございました!
haskell - HXT 解析への状態の追加
HXT を使用した XML 解析から番号付き要素を生成する矢印を作成しようとしています。State モナドのように状態アローを使用する必要があるように思われますが、HXT パッケージにあるすべての例と、状態にアクセスするメソッド ( XmlState ) は IOStateArrow を使用しており、純粋なままにしておきたいと思います。 StateArrow を使用して、テスト プロセスを簡素化します。そのような亜種は存在しますか? そうでない場合、IO で Arrow を実行する必要なく、HXT 解析に状態を追加するにはどうすればよいでしょうか?
haskell - HXT の Arrow のカウントとフィルタリング
XML を解析しようとしていますが、特定のノードから決定された数の子のみをフィルタリングして抽出したいと考えています。例えば:
そして、矢印を実行するgetChildren >>> myFilter 2
と、ID が「a」と「b」のノードのみが返されます。
直感的には、追跡するにはステート アローを使用する必要がありますが、その方法がわかりません。
私はそれを自分でやろうとしましたが、それは私が望んでいるものとはまったく異なり、非常にエレガントに見えず、機能しません. 初期状態として整数パラメーターを使用して一連の矢印を実行し、runSLA
次を定義しようとします。
しかし、もちろん を返すことはできませんNothing
。XmlTree を返す必要があります。しかし、私は何も返したくありません!
そこにはおそらくもっと良い方法があります。手伝って頂けますか?
お時間をいただきありがとうございます。
performance - HXT パフォーマンスの問題のデバッグ
HXT を使用して大きな XML データ ファイル (数百 MB) を読み込もうとしています。
私のコードにはどこかにスペースリークがありますが、見つけられないようです。ghc プロファイリング ツール チェーンに関する非常に限られた知識のおかげで、何が起こっているのかについて少し手掛かりがあります。
基本的に、ドキュメントは解析されますが、評価されません。
ここにいくつかのコードがあります:
コーパス ファイルを読み込もうとしていますが、構造は明らかに<corpus><sentence><word form="Hello"/><word form="world"/></sentence></corpus>
.
非常に小さな開発コーパスでも、プログラムはそれを読み込むのに約 15 秒かかり、そのうち約 20% は GC 時間です (これは多すぎます)。
特に、多くのデータが DRAG 状態で長時間を費やしています。これはプロフィールです:
DRAGの犯人を監視しています。decodeDocument が頻繁に呼び出され、そのデータが実行の最後まで停止していることがわかります。
これは、decodeDocument のすべてをデータ構造 (Sentence
およびWord
) に折りたたむことで簡単に修正でき、RT はこれらのサンクを忘れることができると思います。ただし、現在発生している方法は、オンラインで簡単に発生する可能性のあるモナドでの脱構築による評価を強制すると、最後に 折り畳みが発生することです。これには理由が見当たらず、プログラムを厳格化しようとする私の試みはこれまでのところ無駄でした。誰かが私を助けてくれることを願っています:-)Either
IO
seq
s とsを入れる場所が多すぎてわかりません$!
…</p>
haskell - HXT で失敗した Relax NG 検証からステータスを読み取る
Haskell での XML ファイルの検証は、HXTとRelax NGで正常に機能しますが、結果を取得するにはどうすればよいでしょうか?
次のコードでは、XML ファイルxmlFilename
が Relax NG スキームに対して検証されますrngFilename
。エラーの場合、 にエラーが出力されstderr
、評価が続行されます。
エラーが発生した場合、hxt-relaxng のドキュメントv
に従って、変数には次の情報が保持されます。
検証エラーの場合、ルートにステータス情報を含む空のドキュメントが[出力されます]
欠陥のあるドキュメントを含む結果のツリーは、実際にはstatus
(and module
) 属性を保持します。
今質問:
validateDocumentWithRelaxSchema
検証エラーがあったかどうかの出力を確認するにはどうすればよいですか?
そのために使用できる定義済みの関数はありますか (ただし、まだ見つかりません)。
haskell - グラフライブラリ用のxml-treeパーサー(Haskell)
グラフを操作するためのライブラリを作成しています。主なタスク-xml-treeの解析。木は次のように見えます
保存の構造:
xmlファイルからこの構造にデータを書き込む方法は?この種のxmlツリー(HXTライブラリ)のパーサーを作成できません