そのため、大きな XML ドキュメントが提供されます。クラス名とオントロジー名を指定すると、そのクラスに関連するドキュメントのオントロジー部分を含むオントロジー ビューを計算するクエリを作成する必要があります。より正確には、クラスのサブクラス、インスタンス、およびクラスに関連するルールを選択する必要があります。私はこれを再帰的に行うことを考えていました。
これを簡単に行う方法はありますか?
再帰関数を使用して、ドキュメントで定義されているクラス階層を降りることができます。
declare default element namespace "http://omdoc.org/ns";
declare namespace om = "http://www.openmath.org/OpenMath";
declare function local:class-hierarchy(
$doc as document-node(),
$classname as xs:string
) as node() {
<class name='{$classname}'> {
for $OMA in $doc//axiom/FMP/om:OMOBJ/om:OMA
where $OMA/om:OMS[1]/@name = 'subclass'
and $OMA/om:OMS[3]/@name = $classname
return local:class-hierarchy($doc, $OMA/om:OMS[2]/@name)
}</class>
};
この関数は、サブクラスの関係を表すネストされた要素を返します。Device
たとえばのサブクラスは、次のように計算できます。
let $doc := fn:doc("http://rasdaman.flanche.net/dbwa/Assignment5/example.omdoc"),
$class := 'Device'
return local:class-hierarchy($doc, $class)
結果:
<class xmlns="http://omdoc.org/ns" name="Device">
<class name="Camera">
<class name="DSLR"/>
</class>
</class>
代わりに、この関数を簡単に適応させて、それぞれのクラスのルールとインスタンスを返すことができます。