ドキュメントに関する情報を含む 2 つの XML ファイルがあります。これらのファイルの情報に基づいて DOT グラフを作成する必要があります。
レイアウト.xml
<layout>
<segmentation>
<layout-unit id="lay-1.01" xref="u-1.01 u-1.02 u-1.03"/>
<layout-unit id="lay-1.02" xref="u-1.04 u-1.05 u-1.06 u-1.07 u-1.08">
<layout-unit id="lay-1.03" xref="u-1.09"/>
<layout-unit id="lay-1.04" xref="u-1.10 u-1.11 u-1.12"/>
<layout-unit id="lay-1.05" xref="u-1.13 u-1.14 u-1.15 u-1.16"/>
</segmentation>
</layout>
レトリック.xml
<rhetoric>
<segmentation>
<segment id="s-1.01" xref="u-1.01"/>
<segment id="s-1.02" xref="u-1.02"/>
<segment id="s-1.03" xref="u-1.03"/>
<segment id="s-1.04" xref="u-1.04"/>
<segment id="s-1.05" xref="u-1.05"/>
<segment id="s-1.06" xref="u-1.06"/>
<segment id="s-1.07" xref="u-1.07"/>
<segment id="s-1.08" xref="u-1.08"/>
<segment id="s-1.09" xref="u-1.09"/>
<segment id="s-1.10" xref="u-1.10"/>
<segment id="s-1.11" xref="u-1.11"/>
<segment id="s-1.12" xref="u-1.12"/>
<segment id="s-1.13" xref="u-1.13"/>
<mini-segment id="s-1.14" xref="u-1.14"/>
<mini-segment id="s-1.15" xref="u-1.15"/>
<mini-segment id="s-1.16" xref="u-1.16"/>
</segmentation>
<rst-structure root="s-1.01">
<span id="span-1.01" nucleus="s-1.01" satellites="span-1.02" relation="elaboration"><title xref="s-1.09"></title></span>
<span id="span-1.02" nucleus="s-1.02" satellites="s-1.03" relation="elaboration"/>
<span id="span-1.03" nucleus="s-1.01" satellites="span-1.04" relation="enablement"/>
<span id="span-1.04" nucleus="s-1.04" satellites="span-1.05" relation="enablement"/>
<multi-span id="span-1.05" nuclei="span-1.08 span-1.06" relation="sequence"/>
<span id="span-1.06" nucleus="s-1.06" satellites="span-1.07" relation="elaboration"></span>
<multi-span id="span-1.07" nuclei="s-1.07 s-1.08" relation="restatement"></multi-span>
<span id="span-1.08" nucleus="s-1.05" satellites="s-1.10 span-1.09" relation="elaboration"/>
<span id="span-1.09" nucleus="s-1.11" satellites="span-1.10" relation="nonvolitional-result"/>
<span id="span-1.10" nucleus="s-1.12" satellites="span-1.11" relation="elaboration"/>
</rst-structure>
<mini-structure>
<mini-span id="span-1.11" attribute="s-1.14 s-1.15 s-1.16" attribuend="s-1.13" relation="class-ascription"/>
</mini-structure>
</rhetoric>
DOT グラフを作成するために、 rhetoric.xmlのデータをフェッチし、それを DOT に変換し、 layout.xmlに従ってグラフをサブグラフにソートする XQuery スクリプトがあります。
グラフを以下に示します。
以下に示すように、 @xref属性を使用して、両方のファイルで関連するデータを選択します。
declare function local:add-subgraphs($rhetoric, $layout) {
for $layout-unit-id in $layout/segmentation/layout-unit/@id
let $layout-unit-xrefs := tokenize($layout/segmentation/layout-unit[@id = $layout-unit-id]/@xref, " ")
let $rst-id := $rhetoric/segmentation/segment/@id
let $segment := $rhetoric/segmentation/segment[@xref = $layout-unit-xrefs and @id = $rst-id]/@id
次に、 rhetoric/rst-structure の下のさまざまな要素を調べて、DOT グラフの作成を開始します。
let $add-edges-nucleus := for $span-id in $rhetoric/rst-structure/span[@nucleus = $segment]/@id
let $nucleus := tokenize($rhetoric/rst-structure/span[@id = $span-id]/@nucleus, " ")
return concat('"', $nucleus, '" ', $arrow, ' "', $span-id, '"', ';', $newline)
ご覧のとおり、$segment変数は、特定のサブグラフに属するスパンを定義するために使用されます。
rhetoric.xmlのこのインスタンスで問題が発生します。
<multi-span id="span-1.07" nuclei="s-1.07 s-1.08" relation="restatement"></multi-span>
この場合、$segment 変数を使用してサブグラフに含めるスパンを選択することはできません。これは、スパン要素とは構造が異なるためです。
たとえば、セグメント s-1.07 と s-1.08 を考えてみましょう。これらは、lay-1.02 の下に含まれる必要がありますが、上の図ではサブグラフの外に残っています。
マルチスパン要素を正しいサブグラフの下に配置するために、それらを処理するための追加の基準を定義する方法についてのアイデアはありますか?