法令取得APIが提供しているXMLに対応したPythonの型宣言
https://elaws.e-gov.go.jp/api/1/lawdata/345AC0000000048(著作権法)で取得したデータを参考にしている 型付けの法則性とか
タグ直下のテキストは値.textの形で取得できるようにしてある
基本的には1種類タグにつき1つの型
ただし、属性がなく直下にテキストがあるだけのタグは、汎用のXMLTag型で済ませている
<Message/>みたいなの
直下に同じ要素が複数存在する場合はtupleを使って複数の値を入れられるようにしている
コメントが少ないのは、ちゃんと中身を解析していないから
使わない部分はコメントが無いままになるかも
型宣言
暫定なので後で変更するかも
手作業で入力したので誤字とかあるかも
code:lawdata.py
from typing import NamedTuple
class XMLTag(NamedTuple):
text: str
class Sentence(NamedTuple):
Num: str
WritingMode: str
text: str
class Column(NamedTuple):
Num: str
Sentence: Sentence
text: str
class ItemSentence(NamedTuple):
text: str
class Item(NamedTuple):
"""号ごとのデータ"""
Num: str
ItemTitle: XMLTag
ItemSentence: ItemSentence
text: str
class ParagraphSentence(NamedTuple):
Sentence: Sentence
text: str
class Paragraph(NamedTuple):
"""項ごとのデータ"""
Num: str
ParagraphNum: None
ParagraphSentence: ParagraphSentence
text: str
class Article(NamedTuple):
"""条ごとのデータ"""
Num: str
ArticleCaption: XMLTag
ArticleTitle: XMLTag
text: str
class Section(NamedTuple):
"""節ごとのデータ"""
Num: str
SectionTitle: XMLTag
text: str
class Chapter(NamedTuple):
"""章ごとのデータ"""
Num: str
ChapterTitle: XMLTag
text: str
class SupplProvision(NamedTuple):
"""附則"""
Extract: (None | str)
AmendLawNum: (None | str)
SupplProvisionLabel: XMLTag
text: str
class MainProvision(NamedTuple):
"""本文"""
text: str
class TOCSection(NamedTuple):
"""目次の項目"""
Num: str
SectionTitle: XMLTag
ArticleRange: XMLTag
text: str
class TOCChapter(NamedTuple):
"""目次の章"""
Num: str
ChapterTitle: str
text: str
class TOCSupplProvision(NamedTuple):
SupplProvisionLabel: XMLTag
text: str
class TOC(NamedTuple):
"""目次"""
TOCLabel: XMLTag
TOCSupplProvision: TOCSupplProvision
text: str
class LawTitle(NamedTuple):
Kana: str
KanaSeion: str
Abbrev: str
AbbrevKana: str
AbbrKanaSeion: str
OldLawTitle: str
OldLawTitleKane: str
OldLawTitleKanaSeion: str
text: str
class LawBody(NamedTuple):
LawTitle: LawTitle
EnactStatement: XMLTag
TOC: TOC
MainProvision: MainProvision
text: str
class Law(NamedTuple):
DataInfo: str
Era: str
Lang: str
LawType: str
Num: str
Year: str
LawTypeNum: str
ADYear: str
PromulgateMonth: str
PromulgateDay: str
Category: str
EnforcementDate: str
Mission: str
RepealType: str
RemainInForce: str
Status: str
AmendmentPromulgateDate: str
LawId: str
OriginalPromulgateDate: str
ScheduledEnforcementDate: str
EnforcementComment: str
LawNum: XMLTag
LawBody: LawBody
text: str
class LawFullText(NamedTuple):
Law: Law
text: str
class ApplData(NamedTuple):
LawId: str
LawNum: None
LawFullText: LawFullText
text: str
class Result(NamedTuple):
Code: str
Message: None
text: str
class DataRoot(NamedTuple):
Result: Result
ApplData: ApplData
text: str