#author("2023-08-08T15:54:14+09:00;2023-08-04T17:22:50+09:00","default:ogiwiki","ogiwiki")
#author("2023-08-08T15:56:05+09:00;2023-08-04T17:22:50+09:00","default:ogiwiki","ogiwiki")
[[日本語テキスト処理基礎講座2023]]

*XMLの基礎 [#le34c8ac]

-XML形式もテキストデータの一種
--CSVで決まっていたようなお約束がはるかに詳細に仕様として決められ、いろんな表現が可能になっている。
--[[HTML>https://ja.wikipedia.org/wiki/HTML]]と同じくテキストの[[マークアップ言語>https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%E8%A8%80%E8%AA%9E]]の一つだが、特定目的ではなく汎用

-[[Wikipedia Extensible Markup Language>https://ja.wikipedia.org/wiki/Extensible_Markup_Language]]
--2000年代はじめにはなんでもXMLでやるというくらいに流行った((APIやDB、ファイルシステムまで))
---<冗長性、複雑化
--アプリケーション間のやりとりではJSONが使われるようになったが、今でもコーパス等の文書のマークアップにはXMLが広く使われている
-ここでは、コーパスの利用・構築に必要なXMLに関する基礎知識を説明する
--基本的に解説記述は他のページへのリンクで済ませる

-参考:https://www.javadrive.jp/xml/

**準備 [#v04c78e0]
-VS Codeに次の拡張をインストールしておく
--VSCode [[XML>https://marketplace.visualstudio.com/items?itemName=redhat.vscode-xml]]※XMLのタグのチェックや検証などができる

--VSCode [[XML Tools>https://marketplace.visualstudio.com/items?itemName=DotJoshJohnson.xml]] ※XPathによる検索ができる拡張


**実例 [#jd4d94b1]
-BCCWJのタグセット:https://clrd.ninjal.ac.jp/bccwj/c-xml.html
-明六雑誌コーパス:https://ccd.ninjal.ac.jp/cmj/meiroku/ (XMLアノテーション+形態論情報付与)

-サンプル:[[総研大の授業で作った簡単なXML>https://www.dropbox.com/scl/fi/8bmx0xmub8kihymxo94x5/kokoro.xml?rlkey=beozyt30uly81hw610vjn9ghw&dl=1]]([[青空文庫 夏目漱石「こころ」>https://www.aozora.gr.jp/cards/000148/card773.html]])
--[[青空文庫などで使われているXHTML>https://www.aozora.gr.jp/cards/000148/files/773_14560.html]]はXMLベースで再構成したHTMLなのでXML文書でもある

***TEI (Text Encoding Initiative) [#u02355e5]
-https://tei-c.org/
--参考資料:[[TEI入門に最適なウェブ資料>https://www.dh.ku-orcas.kansai-u.ac.jp/?p=750]](関西大・東アジアDHポータル)
--[[chapter 8 歴史データのさまざまな応用 -Text Encoding Initiative の現在-(永崎研宣)★『歴史情報学の教科書』>https://bungaku-report.com/blog/2019/03/chapter-8-text-encoding-initiative.html]]


**XMLの基礎 [#zd1019d8]

***理解しておくべき用語 [#j807f28f]
-XML文書 XML Document
--ルートが一つの[[木構造>https://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B%E9%80%A0_(%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0)]](入れ子型構造)を表現するものでタグの交差は許されない
--整形式 well-formed
--整形式の(XML文書) well-formed
---整形式でなければXML文書ではないので、XMLアプリケーションはエラーを返す(HTMLのようによしなに表示したりしない)
--妥当な valid
--妥当な(XML文書) valid
---文書型定義に合って検証に通るXML

------
  <tag att1="value1" att2="value2">ほげ</tag>

-タグ Tag
--タグ名 tagの部分。日本語でも可。数字などで始まるタグ名は不可
--開始タグ <tag> 
--終了タグ </tag>
--空要素タグ <tag/> (<tag></tag>と等価)
-属性 Attribute (開始タグ((空要素タグを含む))に複数付けられる att1="value1"の部分)
--属性名 att1, att2の部分
--属性値 value1, value2の部分 ""または''で囲まれたところ
-要素 Element
--一つの開始終了タグで囲まれた範囲 (<tag att1="value1" att2="value2">ほげ</tag>全体)
--ルート要素:必ず一つだけ
--子要素:ある要素の内側に含まれる要素
--空要素:内側に要素もテキストノードも含まない要素
-テキストノード テキスト(ほげ の部分)

**実体参照 Entitiy reference [#wfd66910]
-XML文書の記述に使われている文字((&<>は必ずこれで書く。"'は属性値の中では必ずこれで書く))
--&amp;=&amp;amp; <=&amp;lt; >=&amp;gt; "=&amp;quot; '=&amp;apos; 普通に書くとXML文書が壊れてしまう。
-その他
--&amp;nbsp; スペース、&amp;copy;=©、&amp;yen;=¥など
-文字参照 Unicodeで指定(&amp;#x十六進数;または&amp;#十進数;)
--&amp;#x6a67; &amp;#27239; =&#x6a67;
--&amp;#x1f9ad; &amp;#129453; =&#x1f9ad; 

**文書定義と検証 [#o73b0fed]

***理解しておくべき用語 [#v07f0424]
-文書型定義 Document Type Definition
--文書型宣言
--DTD
--XML schema
-検証 Validation

***名前空間 namespace [#v04969af]
-タグセットにユニークな名前空間を設定、同じタグ名の衝突を避ける
--参考:[[XML用語事典 > XML名前空間>https://atmarkit.itmedia.co.jp/aig/01xml/namespace.html]]
--『太陽コーパス』では使っているが、コーパスのXML文書ではそれほど使われていない。

**XML文書の例 [#s038620d]

-『明六雑誌コーパス』データ
--https://doi.org/10.15084/00003337
//--サンプル:[[m187401.xml>https://www.dropbox.com/scl/fi/iry68y4iy0ongsyp4phcf/m187401.xml?rlkey=4r948m2bfk91a9vr74oylas8o&dl=1]]

-[[「ひまわり」>https://csd.ninjal.ac.jp/lrc/index.php?%C1%B4%CA%B8%B8%A1%BA%F7%A5%B7%A5%B9%A5%C6%A5%E0%A1%D8%A4%D2%A4%DE%A4%EF%A4%EA%A1%D9]]用のデータの例
--[[『分類語彙表』パッケージ>https://csd.ninjal.ac.jp/lrc/index.php?%C1%B4%CA%B8%B8%A1%BA%F7%A5%B7%A5%B9%A5%C6%A5%E0%A1%D8%A4%D2%A4%DE%A4%EF%A4%EA%A1%D9/%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9/%A1%D8%CA%AC%CE%E0%B8%EC%D7%C3%C9%BD%A1%D9%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8]]
//--サンプル:[[corpus.xml>https://www.dropbox.com/scl/fi/li4wdesu21oibyr30zl99/corpus.xml?rlkey=grw998avx3t8hujqo599s5c8r&dl=1]]
-[[Oxford NINJAL Corpus of Old Japanese (ONCOJ)>https://oncoj.ninjal.ac.jp/]] 
--[[ダウンロード>https://github.com/ONCOJ/data/releases/tag/release]]

**XPath [#we73d7df]
-[[Wikipedia XPath>https://ja.wikipedia.org/wiki/XML_Path_Language]]
-参考:https://www.techscore.com/tech/XML/XPath/XPath1/xpath01
-参考:[[XPath>https://atmarkit.itmedia.co.jp/aig/01xml/xpath.html]]とは
--https://developer.mozilla.org/ja/docs/Web/XPath


-XPathの構文 /軸::ノードテスト[述語]/~
--例1:/A/child::B/child::*/child::C[position()=1]
--例2:/雑誌/child::記事[@著者名="上田万年"]/descendant-or-self::node()/child:注[@種類='誤字']
-省略構文 ファイルのPathに似た書き方になる。普通は省略構文で書く
--例1:/A/B/*/C[1]
--例2:/雑誌/記事[@著者名="上田万年"]//注[@種類='誤字']

-軸 axis
--基準点(コンテクストノード)からみた方向・親子関係を指定する(child, descendant, parent, descendant-or-self, preceding-sibling...)
-ノードテスト node test
--名前またはノードの種類を指定する(要素名, *, text(), node())
-述語 predicate
--[]の中に条件を記述して対象を絞り込む。条件式や簡単な関数(([[XPath2.0>http://xmlconsortium.org/wg/tech/WD-xpath20-20020816-Japan-without-Appendix.htm]]でいろんな関数や正規表現が使えるようになった))が使える


**XMLの限界とスタンドオフアノテーション [#cb87db22]
-複雑なコーパスはタグの交差や検索性の面でXMLだけでの表現に限界がある
-言語の構造と紙面情報、パラ言語情報(イントネーションなど)は同時に奇麗に構造化できない
-国語研の形態論情報データベースではXMLファイル+文字位置を使った表形式データで扱っている
--[[『現代日本語書き言葉均衡コーパス』形態論情報アノテーション支援システムの設計・実装・運用>https://doi.org/10.5715/jnlp.21.301]] https://doi.org/10.5715/jnlp.21.301

**XSLT(省略) [#kd8031f0]
-参考:[[XSLT>https://atmarkit.itmedia.co.jp/aig/01xml/xslt.html]]とは
--https://developer.mozilla.org/ja/docs/Web/XSLT

-太陽コーパスでの活用例
-[[「太陽コーパス」>https://clrd.ninjal.ac.jp/cmj/taiyou/index.html]]と[[XMLアプリケーション>https://csd.ninjal.ac.jp/lrc/?%A1%D8%A4%BF%A4%F3%A4%DD%A4%DD%A1%D9%A1%A4%A1%D8%A5%D7%A5%EA%A5%BA%A5%E0%A1%D9]](2000年代)
--[[プリズム(雑誌コーパス用のXSLTスタイルシートとツール)>https://csd.ninjal.ac.jp/lrc/index.php?%A1%D8%A4%BF%A4%F3%A4%DD%A4%DD%A1%D9%A1%A4%A1%D8%A5%D7%A5%EA%A5%BA%A5%E0%A1%D9/%A1%D8%A5%D7%A5%EA%A5%BA%A5%E0%A1%D9]]

***Himawari [#k723a65a]
-[[全文検索システム「ひまわり」>http://www2.ninjal.ac.jp/lrc/index.php?%C1%B4%CA%B8%B8%A1%BA%F7%A5%B7%A5%B9%A5%C6%A5%E0%A1%D8%A4%D2%A4%DE%A4%EF%A4%EA%A1%D9]]
-XMLファイルにインデックスを付けて利用する検索用アプリケーション
--設定ファイルもXML
--コーパスのXMLファイルはUTF-16LE(LF改行)で保存しておく


**XMLエディタ [#a0529736]
-[[Oxygen XML Editor>https://www.oxygenxml.com/]]が高機能で便利(有料、アカデミック版あり)
-普通の利用ならVSCodeの拡張で十分かも

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS