XML ドキュメント ( A.xml
) があり、それを別の XML ドキュメント ( ) に変換しています。これは、に属する各要素に固有のが追加されB.xml
た のレプリカにすぎません。そして、この部分は完了です。A.xml
@id
B.xml
ここで、(一時ツリー内の)character count
すべてのテキスト ノードを追跡するメカニズムを実装したいと思います。このメカニズムは、1 つまたは複数の部分に分割してシリアル化できます。B.xml
maximum character count
B.xml
ソース XML ドキュメント ( A.xml
):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<!--
Rules for splitting:
1. «head/text()» is common for all splits.
2. split files can have 600 characters max each.
3. «title» elements could not be the last element of the any result document.
-->
<head><!-- 8 characters -->Kinesics</head>
<section>
<para><!-- 37 characters -->From Wikipedia, the free encyclopedia</para>
<para><!-- 204 characters [space normalized]-->Kinesics is the interpretation of body
language such as facial expressions and gestures — or, more formally, non-verbal
behavior related to movement, either of any part of the body or the body as a
whole. </para>
<section>
<title><!-- 19 characters -->Birdwhistell's work</title>
<para><!-- 432 characters [space normalized]-->The term was first used (in 1952) by Ray
Birdwhistell, an anthropologist who wished to study how people communicate through
posture, gesture, stance, and movement. Part of Birdwhistell's work involved making
film of people in social situations and analyzing them to show different levels of
communication not clearly seen otherwise. The study was joined by several other
anthropologists, including Margaret Mead and Gregory Bateson.</para>
<para><!-- 453 characters [space normalized]--> Drawing heavily on descriptive
linguistics, Birdwhistell argued that all movements of the body have meaning (i.e.
are not accidental), and that these non-verbal forms of language (or paralanguage)
have a grammar that can be analyzed in similar terms to spoken language. Thus, a
"kineme" is "similar to a phoneme because it consists of a group of movements which
are not identical, but which may be used interchangeably without affecting social
meaning".</para>
</section>
<section>
<title><!-- 19 characters -->Modern applications</title>
<para><!-- 390 characters [space normalized]-->Kinesics are an important part of
non-verbal communication behavior. The movement of the body, or separate parts,
conveys many specific meanings and the interpretations may be culture bound. As many
movements are carried out at a subconscious or at least a low-awareness level,
kinesic movements carry a significant risk of being misinterpreted in an
intercultural communications situation.</para>
</section>
</section>
</root>
XSL ファイル
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="xml" encoding="UTF-8" indent="no"/>
<!--update 1-->
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:variable name="root-replica">
<xsl:call-template name="create-root-replica">
<xsl:with-param name="context" select="*"/>
</xsl:call-template>
</xsl:variable>
<xsl:copy-of select="$root-replica"/>
<!--
<xsl:call-template name="split-n-serialize">
<xsl:with-param name="context" select="$root-replica"/>
</xsl:call-template>
-->
</xsl:template>
<xsl:template name="split-n-serialize">
<xsl:param name="context"/>
<xsl:for-each select="$context">
<xsl:result-document encoding="utf-8" href="{concat('split_',position(),'.xml')}" method="xml" indent="no">
<xsl:sequence select="."/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
<xsl:template name="create-root-replica">
<xsl:param name="context"/>
<root>
<head>
<xsl:value-of select="$context/head"/>
</head>
<xsl:apply-templates select="$context/*[not(self::head)]"/>
</root>
</xsl:template>
<xsl:template match="element()">
<xsl:element name="{local-name()}">
<xsl:attribute name="id">
<xsl:value-of select="generate-id()"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<!--update 2-->
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:transform>
私の入力 XML には文字が含まれており(が と等しいと1562
仮定)、ソース xml ドキュメント内で言及されているルールを使用して 4 つの部分に分割したいと考えています。\s+
A.xml
誰もこれを行う方法を知っていますか? アイデアやコメントは大歓迎です。
アップデート 3
分割ファイルの詳細
1st File
8
37
204 = 249
2nd File
8
19
432 = 459
3rd File
8
453 = 461
4th File
8
19
390 = 417
分割手順の詳細:
要素 «head» の内容は、すべての XML ファイルの一部である必要があります。
ファイルはセクションの途中から分割できますが、段落の途中では分割できません。
«title» 要素は、分割の最後に来る必要はありません。
分割ファイルの最大文字数 (開始タグと終了タグを除く) は 600 文字までです。
サンプル出力ファイル (読みやすくするためにインデントが使用されています)
最初のファイル
<?xml version="1.0" encoding="UTF-8"?>
<root>
<head>Kinesics</head>
<section id="d1e6">
<para id="d1e7">From Wikipedia, the free encyclopedia</para>
<para id="d1e10">Kinesics is the interpretation of body language such as facial expressions and gestures — or, more formally, non-verbal behavior related to movement, either of any part of the body or the body as a whole.</para>
</section>
</root>
2番目のファイル
<?xml version="1.0" encoding="UTF-8"?>
<root>
<head>Kinesics</head>
<section id="d1e6">
<section id="d1e13">
<title id="d1e14">Birdwhistell's work</title>
<para id="d1e17">The term was first used (in 1952) by Ray Birdwhistell, an anthropologist who wished to study how people communicate through posture, gesture, stance, and movement. Part of Birdwhistell's work involved making film of people in social situations and analyzing them to show different levels of communication not clearly seen otherwise. The study was joined by several other anthropologists, including Margaret Mead and Gregory Bateson.</para>
</section>
</section>
</root>
3番目のファイル
<?xml version="1.0" encoding="UTF-8"?>
<root>
<head>Kinesics</head>
<section id="d1e6">
<section id="d1e13">
<para id="d1e20">Drawing heavily on descriptive linguistics, Birdwhistell argued that all movements of the body have meaning (i.e. are not accidental), and that these non-verbal forms of language (or paralanguage) have a grammar that can be analyzed in similar terms to spoken language. Thus, a "kineme" is "similar to a phoneme because it consists of a group of movements which are not identical, but which may be used interchangeably without affecting social meaning".</para>
</section>
</section>
</root>
4番目のファイル
<?xml version="1.0" encoding="UTF-8"?>
<root>
<head>Kinesics</head>
<section id="d1e6">
<section id="d1e23">
<title id="d1e24">Modern applications</title>
<para id="d1e27">Kinesics are an important part of non-verbal communication behavior. The movement of the body, or separate parts, conveys many specific meanings and the interpretations may be culture bound. As many movements are carried out at a subconscious or at least a low-awareness level, kinesic movements carry a significant risk of being misinterpreted in an intercultural communications situation.</para>
</section>
</section>
</root>