[1] 全文検索円陣の検索対象に色々な形式 (特に XML 系) を使えるようにするのは面倒ですので、ある程度共通化できないかと思って中間形式を考えてみました。
[2] 語彙:
要素型 | 意味 | 標準属性 | 最小内容模型 |
s:doc | 根要素 | s:Common, must-understand = qname-but-not-ncname-list (拡張語彙) | (s:Sentences | s:Sentence | s:Phrase | s:Atom | |
xhtml2:div | まとまり (自然言語) | s:Common | (s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | )* |
ss:s | 文 (自然言語) | s:Common | (s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | )* |
s:phrase | 語句 (自然言語) | s:Common | (s:Sentence | s:Phrase | s:Atom | s:Particle | )* |
xhtml2:code | 語句 (非自然言語) | s:Common | (s:Sentences | s:Sentence | s:Atom | s:Particle | |
s:related | 関連情報つき語句 (自然言語) | s:Common | ( (孫は (s:Sentences | s:Sentence | s:Phrase | s:Atom | s:Particle | ) |
s:atom | 語・形態素 | s:Common | (s:Sentences | s:Sentence | s:Atom | s:Particle | )* |
aavocab:aa | AA | s:Common | (s:Sentences | s:Sentence | s:Atom | s:Particle | )* |
s:particle | 語以下 | s:Common | (s:Particle | PCDATA )* |
s:punctuation | 句読点等 | s:Common | (PCDATA )* |
s:meta | メタ情報 | s:Common, about = (""* | 絶対 URI 参照) , for = IDREF | RDF/XML としても解釈できる |
s:object | 物体 | s:Common | (空) |
s:char | 非 UCS 文字 | s:Common | (空) |
どれだけ細かい要素型まで使用するかは、検索円陣の索引付けのどの phase
で使用するかや、原始文書からどれだけの情報が得られるかによる。
(たとえば、 XHTML 1 文書から s:atom
の情報は得られない。)
内容集合:
s:Sentences := xhtml2:div
s:Sentence := ss:s
s:Phrase := s:phrase
| xhtml2:code
| s:related
s:Atom := s:atom
| aavocab:aa
| s:object
s:Particle := s:particle
| s:char
属性集合:
s:Lang := xml:lang
, xhtml2:dir
, script:Script, s:type
= qname-but-not-ncname (数式、計算機言語等)
s:Common := s:Lang, s:Space, s:importance
= ("high" (= 1024) | "normal" (= 0) | "low" (= -1024) | qname-but-not-ncname | float)
, s:semantics
= qname-but-not-ncname-list (元の意味を必要に応じて保存), xml:base
= 絶対 URI 参照, xml:id
= ID
s:Space := xml:space
= "default", s:space
= "preserve"* | "collapse" | "ignore" | qname-but-not-ncname
?:
s:particle
はもっとよい名前はないか? 必要か?xhtml2:dir
は必要か?xhtml2:sub
や xhtml2:sup
は必要か?
(optional な語彙として?)名前空間:
xhtml2 := http://www.w3.org/2002/06/xhtml2
s := http://suika.fam.cx/~wakaba/archive/2004/10/search#
si := http://suika.fam.cx/~wakaba/archive/2004/10/search-instance#
ss := SSML
aavocab := AA (2ch Strictスレ)
script := http://suika.fam.cx/~wakaba/archive/2004/script#
rdf := RDF
[3] 例:
<s:doc [INS[xmlns..]]> xmlns:ex="http://example.org/2004/10/23/search-example-ns#" xml:lang="ja" script:script="Japn" xml:base="http://example.org/2004/10/23/search-example-doc" must-understand="xhtml2:rt"> <s:meta> <dc:title xml:lang="ja">検索対象の文書の例</dc:title> <dc:creator xml:lang="ja">山田太郎</dc:creator> <dc:date>2004-10-23T09:46:00Z</dc:date> </s:meta> <s:phrase s:importance="ex:keyword">全文検索円陣</s:phrase> <s:atom xml:lang="en" s:importance="ex:keyword">XML</s:atom> <xhtml2:div s:semantics="xhtml2:h" s:importance="high"> s:space="ex:xhtml1-display"> 全文検索用中間形式 </xhtml2:div> <xhtml2:div> xml:base="http://example.org/2004/10/23/search-example-doc#section1"> 全文検索<s:related> <s:primary s:semantics="xhtml2:rb">円陣</s:primary> <xhtml2:rt script:script="Kana">エンジン</xhtml2:rt> </s:related>の検索対象に色々な形式 (特に <s:related s:semantics="xhtml2:abbr"> <s:primary xml:lang="en">XML</s:primary> <ex:full xml:lang="en">Extensible Markup Language</ex:full> <xlink:href s:type="xsd:anyURI">http://www.w3.org/TR/REC-xml</xlink:href> </s:related>系) を使えるようにするのは面倒ですので、 ある程度共通化できないかと思って中間形式を考えてみました。 </xhtml2:div> <xhtml2:div s:importance="low" s:space="ignore"> <ss:s> <s:atom ex:品詞="名詞">暇</s:atom> <s:atom>が</s:atom> <s:phrase>ないので</s:phrase> <s:atom>アイデア</s:atom> <s:atom>だけ</s:atom> <s:punctuation>。</s:punctuation></ss:s> </xhtml2:div> <xhtml2:div> xml:base="http://example.org/2004/10/23/search-example-doc#element(1/3)"> <xhtml2:code s:type="ex:sgml-doctype-subset" s:space="preserve"> <!-- <xhtml2:div>根要素。</xhtml2:div> --> <!ELEMENT s:doc (%sentences; | %sentence; | meta)*> </xhtml2:code> </xhtml2:div> </doc>
[4] この中間書式への変換は、 XSLT でもなんでも好きなものを使っていただくということで。
通常は原始文書は普通の文書でよいですが、 完全に機械的に変換できないときは補正情報を原始文書に埋め込んでおくとよいでしょう。 (サイト内の共通の navigation など。) というわけでそのための語彙:
属性集合:
si:Common := script:Script, si:role
= qname-but-not-ncname (s:atom
など), s:importance
, s:Space
script:Script := script:script
= 用字系札
CSS の特性を使うのもまたよし。
例:
@media なにか、索引付け、みたいな媒体名 { ex|footer { display: none; } }
[5] リンクをたどっていく型の検索円陣用に:
slink := <http://suika.fam.cx/~wakaba/archive/2004/10/25/link#>
@slink:hrefs
= 絶対 URI 参照-list
[6] >>5 だと @accept とかがあっても捨ててしまうのが勿体ないかも。
<s:doc must-understand="slink:href"> xmlns... xmlns:http="urn:x-suika-fam-cx:msgpm:header:http:"> <slink:href xlink:href="http://example.org/"> <dc:title>例の頁</dc:title> <http:accept>text/html; q=1</http:accept> <http:accept-charset>utf-8</http:accept-charset> <http:accept-language>ja</http:accept-language> </slink:href> </s:doc>
(must-understand
は、
意味を正しく理解させるとともに、
要素の内容が通常の検索対象の文章と見なされないために必要。)
[7] s:object
要素は、
文章の途中に図などがあって変換できない時に代わりに挿入しておきます。
例えば、 抵抗の図記号は★です。 (★は実際には抵抗記号。)
を <s:s>抵抗の図記号は<s:object/>です。</s:s>
に変換できます。
[8] s:char
要素は、非 UCS 文字
(UCS でまったく表現できない文字や、包摂規準・
文字合成の関係などで直接の対応が存在しない文字、
文字的に使われる UCS に含まれない記号など) が元文書に含まれる時に、
その代わりに使います。 >>7 の例は
<s:s>抵抗の図記号は<s:char my:uri="http://example.com/R"/>です。</s:s>
と表すこともできるでしょう。
(回路図記号が含まれる文書に特化した検索円陣なら、
この情報を有効に使えるでしょう。)