私の XML データは次のようになります。
<mixed_type_parent>
...text...
<other_element1/>
<other_element2/>
<element_in_question>...some content...</element_in_question>
<other_element2>...text...</other_element2>
<other_element1>...text...</other_element1>
...text...
</mixed_type_parent>
Schematron を使用して確認したいのは、「element_in_question」の外側にテキストがある場合、「element_in_question」が「mixed_type_parent」内にのみ表示される可能性があることです。つまり
<mixed_type_parent>
<element_in_question>...some content...</element_in_question>
</mixed_type_parent>
は許可されておらず、エラーが発生するはずです。
「mixed_type_parent」内ですべてのテキストの文字列長をすぐに取得しようとしました
string-length(replace(ancestor::mixed_type_parent[1]/text(),' ', ''))
しかし、ここでも、XPath で最も厄介なエラーの 1 つがあります。
XSLT では、考えられる最も単純な関数でこの問題を解決しました。
<xsl:function name="locfun:make_string">
<xsl:param name="input_sequence"/>
<xsl:value-of select="$input_sequence"/>
</xsl:function>
(XPath にそのような組み込み関数がないように思われるのは、本当に残念です。)
しかし、Schematron でこの機能を使用するにはどうすればよいでしょうか? これに対する解決策が見つかりませんでした。
それ以外:「mixed_type_parent」を除く「mixed_type_parent」の他のすべての子からすべてのテキストを取得するにはどうすればよいですか?