Initial commit

This commit is contained in:
Babibubebon 2024-06-18 03:09:22 +09:00
commit e0b21ac806
Signed by: Babibubebon
GPG key ID: 78C8FB2A2FEA1EE3
21 changed files with 15122 additions and 0 deletions

18
.github/workflows/publish.yml vendored Normal file
View file

@ -0,0 +1,18 @@
name: Publish Python Package
on:
push:
tags:
- "v*.*.*"
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and publish to pypi
uses: JRubics/poetry-publish@v2.0
with:
pypi_token: ${{ secrets.PYPI_TOKEN }}
poetry_version: "==1.7.1"
ignore_dev_requirements: "yes"

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
__pycache__/
*.py[cod]
*$py.class
.venv
.idea
data/

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Babibubebon
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

97
README.md Normal file
View file

@ -0,0 +1,97 @@
# gBizINFO-LOD
[gBizINFO](https://info.gbiz.go.jp/)が提供する[CSV形式のデータ](https://info.gbiz.go.jp/hojin/DownloadTop)からLinked Open Data(LOD)データセットを生成するためのツール
## 使い方
変換元となる法人活動情報語彙対応版CSVファイル群のダウンロード
(注: 法人基本情報は全件の一括ダウンロードが不可のため時間がかかる)
```shell
gbilod download ./work_dir/
```
CSVファイル群をRDF(N-Triples形式)に変換
```shell
gbilod convert ./work_dir/ -o ./output_dir/
```
[Graph URI](#graph-rui)毎にファイルが出力される
## 変換仕様
基本的には以下の仕様書に基づく。
- gBizINFO SPARQL API仕様書: https://web.archive.org/web/2/https://info.gbiz.go.jp/api/document/API.pdf
- リソース定義書 (CSV, XMLスキーマ仕様書): https://info.gbiz.go.jp/common/data/resourceinfo.pdf
### 仕様書との差異
仕様書上の定義と異なる、または未定義である箇所を以下にまとめる。
- 法人番号を表す `ic:ID/ic:体系` の目的語は `<http://imi.go.jp/ns/code_id/id/corporateNumber>`
```
ex:Hojin <http://imi.go.jp/ns/core/rdf#ID> [
<http://imi.go.jp/ns/core/rdf#体系> <http://imi.go.jp/ns/code_id/id/corporateNumber> ;
<http://imi.go.jp/ns/core/rdf#識別値> "0123456789123" ;
a <http://imi.go.jp/ns/core/rdf#ID型>
] ;
```
- 職場情報および財務情報における `hj:数量コレクション/hj:数量/hj:指標` の目的語はic:コード型の型付リテラル
- 提供されていたRDFデータがこのようになっており、互換性確保のためこの仕様を踏襲する。
- 本来はリテラルではなく、 `http://hojin-info.go.jp/graph/commonCode` グラフ内で定義されているリソースへのURI参照を期待したものと思われる。
```
ex:HojinShokuba <http://hojin-info.go.jp/ns/domain/biz/1#数量コレクション> [
<http://hojin-info.go.jp/ns/domain/biz/1#数量> [
<http://hojin-info.go.jp/ns/domain/biz/1#指標> "http://hojin-info.go.jp/code/職場情報/企業規模"^^<http://imi.go.jp/ns/core/rdf#コード型> ;
<http://imi.go.jp/ns/core/rdf#単位表記> "人" ;
<http://imi.go.jp/ns/core/rdf#数値> 100.0 ;
a <http://hojin-info.go.jp/ns/domain/biz/1#数量型>
]
]
```
## Graph URI
- 法人基本情報: `http://hojin-info.go.jp/graph/hojin`
- 補助金情報: `http://hojin-info.go.jp/graph/hojyokin`
- 調達情報: `http://hojin-info.go.jp/graph/chotatsu`
- 表彰情報: `http://hojin-info.go.jp/graph/hyosho`
- 届出認定情報: `http://hojin-info.go.jp/graph/todokede`
- 特許情報: `http://hojin-info.go.jp/graph/tokkyo`
- 職場情報: `http://hojin-info.go.jp/graph/shokuba`
- 財務情報: `http://hojin-info.go.jp/graph/zaimu`
- 共通コード: `http://hojin-info.go.jp/graph/commonCode`
## 背景
かつてgBizINFOではSPARQL APIが提供されており、APIを利用することでRDF形式のデータにアクセスすることができた。
また、RDFストアとしてAmazon Neptuneを採用し[^1]、実践的な運用ノウハウが公開されるなど[^2]、システム面でも有用な事例であった。
一方で、野村総合研究所が落札した「令和4年度経済産業省デジタルプラットフォーム構築事業(
Gビズインフォを通じた効果的なオープンデータ利活用の促進に向けた調査)
」の[報告書 (2023年3月17日)](https://www.meti.go.jp/meti_lib/report/2022FY/000235.pdf)
によると、LOD形式でのデータ提供について以下のような実態を指摘しており、公共データ分野でのLODの一定のニーズは認めているものの、SPARQL APIエンドポイントの存続有無の検討が必要と結論づけている。
```
現行Gビズインフォにおける、利用者の期待と現状
機能 - SPARQL API
実態: 法人データにおいてはLODの普及度が低いため、活用されているとは言いがたい。
利用者からの評価: △ インタビュー先のうち多数は知らない・知っているが使いにくいので使わないといった評価であった。
```
2023年10月31日にはgBizINFOサイト上でRDF形式データの提供廃止が告知され、2024年4月1日に完全廃止となった[^3]。
[^1]: [AWS 導入事例:経済産業省](https://aws.amazon.com/jp/solutions/case-studies/meti/)
[^2]: [経済産業省のデジタル化とgBizINFOの展開 2020年8⽉](https://pages.awscloud.com/rs/112-TZM-766/images/Session%204%20-%20gBizINFO.pdf)
[^3]: [RDF廃止サービス終了のお知らせ](https://info.gbiz.go.jp/html/RdfStop.html)
## License
本リポジトリに含まれる [`commonCode.ttl`](commonCode.ttl) を除くリソースは、MIT Licenseで提供される。
`commonCode.ttl` は、「[gBizINFO](https://info.gbiz.go.jp/)」経済産業省のSPARQL APIより取得・加工して作成したもので、[経済産業省 利用規約](https://www.meti.go.jp/main/rules.html)に従い利用するものである。

12508
commonCode.ttl Normal file

File diff suppressed because it is too large Load diff

3
gbizinfo_lod/__init__.py Normal file
View file

@ -0,0 +1,3 @@
import importlib.metadata
__version__ = importlib.metadata.version("gbizinfo_lod")

50
gbizinfo_lod/client.py Normal file
View file

@ -0,0 +1,50 @@
import csv
import requests
class GbizinfoClient:
DOWNLOAD_ENDPOINT = "https://info.gbiz.go.jp/hojin/Download"
CSV_ENDPOINT = "https://info.gbiz.go.jp/hojin/OutputCSV"
CSV_MAX_ROWS = 1000
def __init__(self):
self.session = requests.Session()
def download_csv(
self, downfile: int, downtype: str = "zip", downenc: str = "UTF-8"
) -> requests.Response:
data = {
"downfile": downfile,
"downtype": downtype,
"downenc": downenc,
}
res = self.session.post(self.DOWNLOAD_ENDPOINT, data=data, stream=True)
res.raise_for_status()
return res
def download_csv_to_file(
self,
file_path: str,
downfile: int,
downtype: str = "zip",
downenc: str = "UTF-8",
) -> None:
res = self.download_csv(downfile, downtype, downenc)
with open(file_path, "wb") as f:
for c in res.iter_content(chunk_size=4 * 1024):
f.write(c)
def output_csv(
self, hojin_bango_list: list[str], csvdata: str = "00", output: str = "U"
) -> list[dict[str, str]]:
data = {
"csvdata": csvdata,
"output": output,
"hojinBangoList": ",".join(hojin_bango_list),
}
res = self.session.post(self.CSV_ENDPOINT, data=data, stream=True)
res.raise_for_status()
lines = res.iter_lines(decode_unicode=True)
next(lines)
return [row for row in csv.DictReader(lines)]

183
gbizinfo_lod/command.py Normal file
View file

@ -0,0 +1,183 @@
import csv
import os
import shutil
import time
from typing import Iterator
import click
from . import __version__
from .client import GbizinfoClient
from .mappers import *
from .mappers.todokede import GbizInfoTodokedeMapper
@click.group()
def cli():
pass
@cli.command()
def version():
click.echo(f"gbizinfo_lod/{__version__}")
@cli.command(help="Download CSV files")
@click.argument(
"work_dir", type=click.Path(exists=True, file_okay=False, writable=True)
)
@click.option("--sleep", type=int, default=3, help="Sleep time in seconds")
def download(work_dir: str, sleep: int):
client = GbizinfoClient()
csv_files = {
# CSV形式法人活動情報語彙対応版
0: "TodokedeNinteijoho",
1: "Hyoshojoho",
2: "Hojokinjoho",
3: "Chotatsujoho",
4: "Tokkyojoho",
5: "Zaimujoho",
6: "Shokubajoho",
# CSV形式
7: "Kihonjoho",
}
for file_id, name in csv_files.items():
zip_file_name = f"{name}_UTF-8.zip"
csv_file_name = f"{name}_UTF-8.csv"
zip_file_path = os.path.join(work_dir, zip_file_name)
csv_file_path = os.path.join(work_dir, csv_file_name)
click.echo(f"Downloading {zip_file_name}")
client.download_csv_to_file(zip_file_path, file_id)
click.echo(f"Unpacking {zip_file_name}")
shutil.unpack_archive(zip_file_path, work_dir)
os.remove(zip_file_path)
if not os.path.exists(csv_file_path):
raise click.ClickException(f"{csv_file_path} not found")
kihonjoho_csv_file = os.path.join(work_dir, "Kihonjoho_UTF-8.csv")
kihonjoho_imi_file = os.path.join(work_dir, "Kihonjoho_IMI_UTF-8.csv")
if not os.path.exists(kihonjoho_imi_file):
click.echo("Retrieving Kihonjoho (IMI version)")
with open(kihonjoho_imi_file, "w", encoding="utf-8") as f:
writer = None
for row in get_kihonjoho_imi(kihonjoho_csv_file, client):
if writer is None:
writer = csv.DictWriter(f, fieldnames=row.keys())
writer.writeheader()
writer.writerow(row)
def get_kihonjoho_imi(
csv_file: str, client: GbizinfoClient, sleep: int = 3
) -> Iterator[dict]:
with open(csv_file, "r", encoding="utf-8-sig") as f:
reader = csv.DictReader(f)
count = 0
chunk = []
for row in reader:
if not row["法人名"]:
click.echo(f"skip: {row['法人番号']}", err=True)
continue
chunk.append(row["法人番号"])
if len(chunk) == client.CSV_MAX_ROWS:
count += len(chunk)
click.echo(f"{count} ...")
for r in client.output_csv(chunk):
yield r
chunk.clear()
time.sleep(sleep)
if len(chunk) > 0:
for r in client.output_csv(chunk):
yield r
count += len(chunk)
click.echo(f"{count}")
MAPPER_TYPES = [
"hojin",
"hojyokin",
"chotatsu",
"hyosho",
"todokede",
"tokkyo",
"shokuba",
"zaimu",
]
@cli.command(help="Convert CSV files to RDF")
@click.argument("work_dir")
@click.option(
"--mapper", "-m", "mappers", multiple=True, type=click.Choice(MAPPER_TYPES)
)
@click.option("--processes", "-p", type=int, default=-1)
@click.option(
"--output-dir", "-o", type=click.Path(exists=True, file_okay=False, writable=True)
)
def convert(work_dir: str, mappers: list[str], processes: int, output_dir: str):
if not mappers:
mappers = MAPPER_TYPES
if not output_dir:
output_dir = work_dir
for m in mappers:
match m:
case "hojin":
mapper = GbizInfoHojinMapper(
os.path.join(work_dir, "Kihonjoho_IMI_UTF-8.csv")
)
case "hojyokin":
mapper = GbizInfoHojyokinMapper(
os.path.join(work_dir, "Hojokinjoho_UTF-8.csv")
)
case "chotatsu":
mapper = GbizInfoChotatsuMapper(
os.path.join(work_dir, "Chotatsujoho_UTF-8.csv")
)
case "hyosho":
mapper = GbizInfoHyoshoMapper(
os.path.join(work_dir, "Hyoshojoho_UTF-8.csv")
)
case "todokede":
mapper = GbizInfoTodokedeMapper(
os.path.join(work_dir, "TodokedeNinteijoho_UTF-8.csv")
)
case "tokkyo":
mapper = GbizInfoTokkyoMapper(
os.path.join(work_dir, "Tokkyojoho_UTF-8.csv")
)
case "shokuba":
mapper = GbizInfoShokubaMapper(
os.path.join(work_dir, "Shokubajoho_UTF-8.csv")
)
case "zaimu":
mapper = GbizInfoZaimuMapper(
os.path.join(work_dir, "Zaimujoho_UTF-8.csv")
)
case _:
raise NotImplementedError
output_file = os.path.join(output_dir, f"{m}.nt")
click.echo(f"output: {output_file}")
click.echo(f"Running {m} mapper ...")
with open(output_file, "w") as f:
mapper.run(n_jobs=processes, output=f)
@cli.command(help="Fetch CSV data from OutputCSV endpoint")
@click.argument("hojin_bango")
def output_csv(hojin_bango: str):
client = GbizinfoClient()
res = client.output_csv([hojin_bango])
for row in res:
click.echo(row)

View file

@ -0,0 +1,132 @@
import csv
import sys
from abc import ABC, abstractmethod
from typing import IO, Iterator, Tuple, Union
from joblib import Parallel, delayed
from rdflib import BNode
from rdflib import Literal as LiteralRdflib
from rdflib.graph import _ObjectType, _PredicateType, _SubjectType, _TripleType
from rdflib.namespace import RDF
from rdflib.plugins.serializers.nt import _nt_row
_TripleMapType = Tuple[
_SubjectType, _PredicateType, Union[str, _ObjectType, "BlankPredicateObjectMap"]
]
_PredicateObjectType = Tuple[
_PredicateType, Union[str, _ObjectType, "BlankPredicateObjectMap"]
]
class Literal:
def __new__(cls, value, *args, **kwargs) -> LiteralRdflib | None:
if value is None:
return None
return LiteralRdflib(value, *args, **kwargs)
class BlankPredicateObjectMap:
def __init__(self, predicate_objects: list[_PredicateObjectType]):
self.subject = BNode()
self.predicate_objects = predicate_objects
def bpo(predicate_objects: list[_PredicateObjectType]) -> BlankPredicateObjectMap:
return BlankPredicateObjectMap(predicate_objects)
def normalize_triple(triple: _TripleType) -> _TripleMapType | None:
if triple[2] is None:
return None
if isinstance(triple[2], Literal) and triple[2] is None:
return None
if type(triple[2]) is str:
triple = (triple[0], triple[1], Literal(triple[2]))
return triple
def flatten_triple_map(triple_map: _TripleMapType) -> list[_TripleType]:
triples = []
if isinstance(triple_map[2], BlankPredicateObjectMap):
bnode = triple_map[2].subject
b_triples = []
for po in triple_map[2].predicate_objects:
b_triples.extend(flatten_triple_map((bnode, po[0], po[1])))
# Ignore statements if rdf:type only
if len([t for t in b_triples if t[1] != RDF.type]) > 0:
triples.append((triple_map[0], triple_map[1], bnode))
triples.extend(b_triples)
else:
t = normalize_triple(triple_map)
if t:
triples.append(t)
return triples
def serialize_triple(triple: _TripleMapType) -> str:
return _nt_row(triple)
class CSV2RDFMapper(ABC):
def __init__(self, csv_file: str):
self.file = csv_file
def iterator(self) -> Iterator[dict[str, str]]:
with open(self.file, encoding="utf_8_sig") as f:
reader = csv.DictReader(f)
for row in reader:
yield row
def run(self, n_jobs: int = -1, output: IO[str] = sys.stdout):
if n_jobs == 1:
for row in self.iterator():
for triple_map in self.map_to_triples(self.preprocess(row)):
for triple in flatten_triple_map(triple_map):
output.write(serialize_triple(triple))
else:
def job(row: dict[str, str]) -> str:
return "".join(
[
serialize_triple(triple)
for triple_map in self.map_to_triples(self.preprocess(row))
for triple in flatten_triple_map(triple_map)
]
)
res = Parallel(n_jobs=n_jobs, return_as="generator_unordered", verbose=1)(
delayed(job)(row) for row in self.iterator()
)
for lines in res:
output.write(lines)
@staticmethod
def preprocess(row: dict[str, str]) -> dict[str, str | None]:
return {key: val if val != "" else None for key, val in row.items()}
@staticmethod
@abstractmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
raise NotImplementedError
from .chotatsu import GbizInfoChotatsuMapper
from .hojin import GbizInfoHojinMapper
from .hojyokin import GbizInfoHojyokinMapper
from .hyosho import GbizInfoHyoshoMapper
from .shokuba import GbizInfoShokubaMapper
from .tokkyo import GbizInfoTokkyoMapper
from .zaimu import GbizInfoZaimuMapper
__all__ = [
"GbizInfoHojinMapper",
"GbizInfoHojyokinMapper",
"GbizInfoChotatsuMapper",
"GbizInfoHyoshoMapper",
"GbizInfoTokkyoMapper",
"GbizInfoShokubaMapper",
"GbizInfoZaimuMapper",
]

View file

@ -0,0 +1,434 @@
from ..namespace import *
from . import CSV2RDFMapper, Literal, _TripleMapType, bpo
class GbizInfoKatsudoMapper(CSV2RDFMapper):
"""法人活動情報 共通"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
s = HJ_DATA[row["ID-識別値"]]
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = [
(s, HJ.法人活動情報, ss),
# 1
(
ss,
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(IC.体系, IC_ID.corporateNumber),
(IC.識別値, row["ID-識別値"]),
]
),
),
# 2, 3, 4
(
ss,
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.種別, row["名称-種別"]),
(IC.表記, row["名称-表記"]),
(IC.カナ表記, row["名称-カナ表記"]),
]
),
),
# 5, 6, 7
(
ss,
IC.連絡先,
bpo(
[
(RDF.type, IC.連絡先型),
(IC.種別, row["連絡先-種別"]),
(IC.電話番号, row["連絡先-電話番号"]),
(IC.FAX番号, row["連絡先-FAX番号"]),
]
),
),
# 8, 9
(
ss,
IC.関連組織,
bpo(
[
(RDF.type, IC.組織関連型),
(IC.役割, row["関連組織-役割"]),
(
IC.組織,
bpo(
[
(RDF.type, IC.組織型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["関連組織-名称"]),
]
),
),
]
),
),
]
),
),
# 10, 11, 12, 13, 14, 15
(
ss,
IC.住所,
bpo(
[
(RDF.type, HJ.住所型),
(IC.種別, row["住所-種別"]),
(IC.表記, row["住所-表記"]),
(IC.郵便番号, row["住所-郵便番号"]),
(IC.都道府県, row["住所-都道府県"]),
(IC.市区町村, row["住所-市区町村"]),
(HJ.町名番地等, row["住所-町名番地等"]),
]
),
),
# 16, 17, 18
(
ss,
IC.代表者,
bpo(
[
(RDF.type, IC.構成員型),
(IC.役割, row["代表者-役割"]),
(
IC.構成員,
bpo(
[
(RDF.type, IC.構成員型),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.種別, row["代表者-表示用種別"]),
(IC.姓名, row["代表者-表示用氏名"]),
]
),
),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.種別, row["代表者-検索用種別"]),
(IC.姓名, row["代表者-検索用氏名"]),
]
),
),
]
),
),
]
),
),
# 19
(
ss,
IC.設立日,
bpo(
[
(RDF.type, IC.日付型),
(IC.標準型日付, Literal(row["設立日"], datatype=XSD.date)),
]
),
),
# 20, 21, 22
(
ss,
IC.資本金,
bpo(
[
(RDF.type, IC.金額型),
(IC.数値, Literal(row["資本金-数値"], datatype=XSD.decimal)),
(IC.通貨, row["資本金-通貨"]),
(
IC.通貨コード,
Literal(
row["資本金-通貨コード"],
datatype=ISO4217.ISO3AlphaCurrencyCodeContentType,
),
),
]
),
),
# 23
(
ss,
IC.関連人員,
bpo(
[
(RDF.type, IC.人数型),
(
IC.人数,
Literal(
row["関連人員-人数"], datatype=XSD.nonNegativeInteger
),
),
]
),
),
# 24
(
ss,
HJ.更新日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日時,
Literal(
row["更新日時"],
datatype=XSD.dateTime,
),
),
]
),
),
# 25, 26, 27, 28
(
ss,
HJ.公表組織,
bpo(
[
(RDF.type, IC.組織型),
(
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(
IC.体系,
bpo(
[
(RDF.type, IC.ID体系型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(
IC.表記,
row["公表組織-ID名称"],
),
]
),
),
(
IC.発行者,
bpo(
[
(RDF.type, IC.組織型),
(
IC.名称,
bpo(
[
(
RDF.type,
IC.名称型,
),
(
IC.表記,
row[
"公表組織-ID発行者"
],
),
]
),
),
]
),
),
]
),
),
(IC.識別値, row["公表組織-ID識別値"]),
]
),
),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["公表組織-名称表記"]),
]
),
),
]
),
),
# 29
(
ss,
HJ.システム名,
bpo([(RDF.type, IC.名称型), (IC.表記, row["システム名"])]),
),
# 30
(ss, HJ.キー情報, row["キー情報"]),
# 31
(ss, HJ.業種コード, row["業種コード"]),
# 32
(ss, HJ.事業内容, row["事業内容"]),
# 33
(
ss,
HJ.営業エリア,
bpo(
[
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["営業エリア-表記"]),
]
),
)
]
),
),
# 34, 35, 36
(
ss,
HJ.決算情報,
bpo(
[
(RDF.type, IC.金額型),
(IC.数値, Literal(row["決算情報-金額"], datatype=XSD.decimal)),
(IC.通貨, row["決算情報-通貨"]),
(
IC.通貨コード,
Literal(
row["決算情報-通貨コード"],
datatype=ISO4217.ISO3AlphaCurrencyCodeContentType,
),
),
]
),
),
# 37
(
ss,
HJ.認定日,
bpo(
[
(RDF.type, IC.日付型),
(
IC.標準型日付,
Literal(row["法人活動-認定日"], datatype=XSD.date),
),
]
),
),
# 38
(
ss,
HJ.活動名称,
bpo([(RDF.type, IC.名称型), (IC.表記, row["法人活動-活動名称"])]),
),
# 39
(ss, HJ.部門, row["法人活動-部門"]),
# 40, 41
(
ss,
HJ.区分,
bpo(
[
(IC.種別, row["法人活動-区分-種別"]),
(IC.表記, row["法人活動-区分-内容"]),
]
),
),
# 42
(ss, HJ.対象, row["法人活動-対象"]),
# 43
(
ss,
IC.金額,
bpo(
[
(RDF.type, IC.金額型),
(IC.数値, Literal(row["法人活動-金額"], datatype=XSD.decimal)),
]
),
),
# 44
(
ss,
HJ.状況,
bpo(
[
(RDF.type, IC.状況型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["法人活動-状況名称"]),
]
),
),
]
),
),
# 45, 46
(
ss,
IC.期間,
bpo(
[
(RDF.type, IC.期間型),
(
IC.開始日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日付,
Literal(
row["法人活動-期間開始日時"],
datatype=XSD.dateTime,
),
),
]
),
),
(
IC.終了日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日付,
Literal(
row["法人活動-期間終了日時"],
datatype=XSD.dateTime,
),
),
]
),
),
]
),
),
# 47
(ss, HJ.備考, bpo([(IC.種別, row["備考-種別"])])),
# 48
(ss, HJ.資格, bpo([(IC.種別, row["資格-表記"])])),
]
return triples
__all__ = ["GbizInfoKatsudoMapper"]

View file

@ -0,0 +1,24 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoChotatsuMapper(GbizInfoKatsudoMapper):
"""調達情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = GbizInfoKatsudoMapper.map_to_triples(row)
triples.extend(
[
(ss, RDF.type, HJ.調達型),
]
)
return triples
__all__ = ["GbizInfoChotatsuMapper"]

View file

@ -0,0 +1,288 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import CSV2RDFMapper, _TripleMapType, bpo
class GbizInfoHojinMapper(CSV2RDFMapper):
"""法人情報・法人基本情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
s = HJ_DATA[row["ID-識別値"]]
ss = HJ_BASIC[row["ID-識別値"]]
triples = [
(s, HJ.法人基本情報, ss),
(s, RDF.type, HJ.法人情報型),
(ss, RDF.type, HJ.法人基本情報型),
# 1
(
ss,
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(IC.体系, IC_ID.corporateNumber),
(IC.識別値, row["ID-識別値"]),
]
),
),
# 2, 3
(
ss,
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.種別, row["名称[日本語表記]-種別"]),
(IC.表記, row["名称[日本語表記]-表記"]),
(IC.カナ表記, row["名称[日本語表記]-カナ表記"]),
]
),
),
# 2, 3
(
ss,
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.種別, row["名称[英語表記]-種別"]),
(IC.表記, row["名称[英語表記]-表記"]),
(IC.カナ表記, row["名称[英語表記]-カナ表記"]),
]
),
),
# 4, 5
(
ss,
IC.活動状況,
bpo(
[
(RDF.type, IC.状況型),
(
IC.発生日,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日時,
Literal(
row["活動状況-発生日"],
datatype=XSD.dateTime,
),
),
]
),
),
(IC.説明, row["活動状況-説明"]),
]
),
),
# 6, 7, 8, 9, 10, 11, 12, 13
(
ss,
IC.住所,
bpo(
[
(RDF.type, HJ.住所型),
(IC.種別, row["住所[日本語表記]-種別"]),
(IC.表記, row["住所[日本語表記]-表記"]),
(IC.郵便番号, row["住所[日本語表記]-郵便番号"]),
(IC.都道府県, row["住所[日本語表記]-都道府県"]),
(
IC.都道府県コード,
URIRef(
f"http://imi.go.jp/ns/code_id/code/jisx0401#{row['住所[日本語表記]-都道府県コード']}"
),
),
(IC.市区町村, row["住所[日本語表記]-市区町村"]),
(
IC.市区町村コード,
URIRef(
f"http://imi.go.jp/ns/code_id/code/jisx0402#{row['住所[日本語表記]-市区町村コード']}"
),
),
(HJ.町名番地等, row["住所[日本語表記]-町名番地等"]),
]
),
),
# 6, 7, 8, 9, 10, 11, 12, 13, 14
(
ss,
IC.住所,
bpo(
[
(RDF.type, HJ.住所型),
(IC.種別, row["住所[英語表記]-種別"]),
(IC.表記, row["住所[英語表記]-表記"]),
(IC.郵便番号, row["住所[英語表記]-郵便番号"]),
(IC.都道府県, row["住所[英語表記]-都道府県"]),
(
IC.都道府県コード,
URIRef(
f"http://imi.go.jp/ns/code_id/code/jisx0401#{row['住所[英語表記]-都道府県コード']}"
),
),
(IC.市区町村, row["住所[英語表記]-市区町村"]),
(
IC.市区町村コード,
URIRef(
f"http://imi.go.jp/ns/code_id/code/jisx0402#{row['住所[英語表記]-市区町村コード']}"
),
),
(HJ.町名番地等, row["住所[英語表記]-町名番地等"]),
(
HJ.市区町村町名番地等,
row["住所[英語表記]-市区町村町名番地以下"],
),
]
),
),
# 15
(
ss,
IC.組織種別,
URIRef(f"http://imi.go.jp/ns/code_id/code/kind#{row['組織種別']}"),
),
# 16
(
ss,
HJ.更新日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日時,
Literal(
(
f"{row["更新日時"]}T00:00:00"
if row["更新日時"]
else None
),
datatype=XSD.dateTime,
),
),
]
),
),
# 17, 18, 19, 20
(
ss,
HJ.公表組織,
bpo(
[
(RDF.type, IC.組織型),
(
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(
IC.体系,
bpo(
[
(RDF.type, IC.ID体系型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(
IC.表記,
row["公表組織-ID名称"],
),
]
),
),
(
IC.発行者,
bpo(
[
(RDF.type, IC.実体型),
(
IC.名称,
bpo(
[
(
RDF.type,
IC.名称型,
),
(
IC.表記,
row[
"公表組織-ID発行者"
],
),
]
),
),
]
),
),
]
),
),
(IC.識別値, row["公表組織-ID識別値"]),
]
),
),
(
IC.名称,
bpo(
[(RDF.type, IC.名称型), (IC.表記, row["公表組織-名称"])]
),
),
]
),
),
# 21, 22
(
ss,
HJ.区分,
bpo(
[
(IC.種別, row["区分-処理種別"]),
(IC.表記, row["区分-処理表記"]),
]
),
),
# 21, 22
(
ss,
HJ.区分,
bpo(
[
(IC.種別, row["区分-訂正種別"]),
(IC.表記, row["区分-訂正表記"]),
]
),
),
# 21, 22
(
ss,
HJ.区分,
bpo(
[
(IC.種別, row["区分-最新種別"]),
(IC.表記, row["区分-最新表記"]),
]
),
),
# 21, 22
(
ss,
HJ.区分,
bpo(
[
(IC.種別, row["区分-過去種別"]),
(IC.表記, row["区分-過去表記"]),
]
),
),
]
return triples
__all__ = ["GbizInfoHojinMapper"]

View file

@ -0,0 +1,54 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoHojyokinMapper(GbizInfoKatsudoMapper):
"""補助金情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = GbizInfoKatsudoMapper.map_to_triples(row)
triples.extend(
[
(ss, RDF.type, HJ.補助金型),
# 49
(
ss,
HJ.採択日,
bpo(
[
(RDF.type, IC.日付型),
(
IC.標準型日付,
Literal(row["補助金-採択日"], datatype=XSD.date),
),
]
),
),
# 50
(
ss,
HJ.交付決定日,
bpo(
[
(RDF.type, IC.日付型),
(
IC.標準型日付,
Literal(row["補助金-交付決定日"], datatype=XSD.date),
),
]
),
),
# 51
(ss, HJ.補助金財源, row["補助金-財源"]),
]
)
return triples
__all__ = ["GbizInfoHojyokinMapper"]

View file

@ -0,0 +1,24 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoHyoshoMapper(GbizInfoKatsudoMapper):
"""表彰情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = GbizInfoKatsudoMapper.map_to_triples(row)
triples.extend(
[
(ss, RDF.type, HJ.表彰型),
]
)
return triples
__all__ = ["GbizInfoHyoshoMapper"]

View file

@ -0,0 +1,364 @@
from ..namespace import *
from . import Literal, _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoShokubaMapper(GbizInfoKatsudoMapper):
"""職場情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
s = HJ_DATA[row["ID-識別値"]]
ss = HJ_EXT[row["キー情報"]]
# 数量コレクション
suryo_keys = [
# 数値, 単位表記, 指標, 種別
(
"職場情報-企業規模",
"",
"http://hojin-info.go.jp/code/職場情報/企業規模",
None,
),
(
"職場情報-企業規模詳細(男性)",
"",
"http://hojin-info.go.jp/code/職場情報/企業規模詳細(男性)",
None,
),
(
"職場情報-企業規模詳細(女性)",
"",
"http://hojin-info.go.jp/code/職場情報/企業規模詳細(女性)",
None,
),
(
"職場情報-平均継続勤務年数-男性",
"",
"http://hojin-info.go.jp/code/職場情報/男性平均継続勤務年数",
"職場情報-平均継続勤務年数-範囲",
),
(
"職場情報-平均継続勤務年数-女性",
"",
"http://hojin-info.go.jp/code/職場情報/女性平均継続勤務年数",
"職場情報-平均継続勤務年数-範囲",
),
(
"職場情報-正社員の平均継続勤務年数",
"",
"http://hojin-info.go.jp/code/職場情報/正社員平均継続勤務年数",
"職場情報-平均継続勤務年数-範囲",
),
(
"職場情報-従業員の平均年齢",
"",
"http://hojin-info.go.jp/code/職場情報/従業員平均年齢",
None,
),
(
"職場情報-月平均所定外労働時間",
"時間",
"http://hojin-info.go.jp/code/職場情報/月平均所定外労働時間",
None,
),
(
"職場情報-労働者に占める女性労働者の割合",
"%",
"http://hojin-info.go.jp/code/職場情報/女性労働者割合",
"職場情報-労働者に占める女性労働者の割合-範囲",
),
(
"職場情報-女性管理職人数",
"",
"http://hojin-info.go.jp/code/職場情報/女性管理職人数",
None,
),
(
"職場情報-管理職全体人数(男女計)",
"",
"http://hojin-info.go.jp/code/職場情報/管理職人数",
None,
),
(
"職場情報-女性役員人数",
"",
"http://hojin-info.go.jp/code/職場情報/女性役員人数",
None,
),
(
"職場情報-役員全体人数(男女計)",
"",
"http://hojin-info.go.jp/code/職場情報/役員人数",
None,
),
(
"職場情報-育児休業対象者数(男性)",
"",
"http://hojin-info.go.jp/code/職場情報/育児休業対象者数(男性)",
None,
),
(
"職場情報-育児休業対象者数(女性)",
"",
"http://hojin-info.go.jp/code/職場情報/育児休業対象者数(女性)",
None,
),
(
"職場情報-育児休業取得者数(男性)",
"",
"http://hojin-info.go.jp/code/職場情報/育児休業取得者数(男性)",
None,
),
(
"職場情報-育児休業取得者数(女性)",
"",
"http://hojin-info.go.jp/code/職場情報/育児休業取得者数(女性)",
None,
),
]
triples = [
(s, HJ.法人活動情報, ss),
(ss, RDF.type, HJ.職場情報型),
# 1
(
ss,
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(IC.体系, IC_ID.corporateNumber),
(IC.識別値, row["ID-識別値"]),
]
),
),
# 2
(
ss,
IC.連絡先,
bpo(
[
(RDF.type, IC.連絡先型),
(IC.Webサイト, row["連絡先-Webサイト"]),
]
),
),
# 3
(
ss,
IC.代表者,
bpo(
[
(RDF.type, IC.構成員型),
(
IC.構成員,
bpo(
[
(RDF.type, IC.人型),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.姓名, row["代表者-表示用氏名"]),
]
),
),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.姓名, row["代表者-検索用氏名"]),
]
),
),
]
),
),
]
),
),
# 4
(
ss,
HJ.更新日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日時,
Literal(
row["更新日時"],
datatype=XSD.dateTime,
),
),
]
),
),
# 5, 6, 7, 8
(
ss,
HJ.公表組織,
bpo(
[
(RDF.type, IC.組織型),
(
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(
IC.体系,
bpo(
[
(RDF.type, IC.ID体系型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(
IC.表記,
row["公表組織-ID名称"],
),
]
),
),
(
IC.発行者,
bpo(
[
(RDF.type, IC.組織型),
(
IC.名称,
bpo(
[
(
RDF.type,
IC.名称型,
),
(
IC.表記,
row[
"公表組織-ID発行者"
],
),
]
),
),
]
),
),
]
),
),
(IC.識別値, row["公表組織-ID識別値"]),
]
),
),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["公表組織-名称表記"]),
]
),
),
]
),
),
# 9
(
ss,
HJ.システム名,
bpo([(RDF.type, IC.名称型), (IC.表記, row["システム名"])]),
),
# 10
(ss, HJ.キー情報, row["キー情報"]),
# 11
(
ss,
HJ.創業日,
bpo(
[
(RDF.type, IC.日付型),
(
IC.,
Literal(row["職場情報-創業年"], datatype=XSD.integer),
),
]
),
),
# 12
(ss, HJ.事業内容, row["職場情報-事業概要"]),
# 13
(
ss,
IC.関連人員,
bpo(
[
(RDF.type, IC.人数型),
(
IC.人数,
Literal(
row["関連人員-人数"], datatype=XSD.nonNegativeInteger
),
),
]
),
),
# 14, 15, 16, 17
*[
(
ss,
HJ.数量コレクション,
bpo(
[
(RDF.type, HJ.数量コレクション型),
(
HJ.数量,
bpo(
[
(RDF.type, HJ.数量型),
(
IC.数値,
Literal(
row[value],
datatype=XSD.decimal,
),
),
(
HJ.指標,
(
Literal(
"http://hojin-info.go.jp/code/職場情報/企業規模",
datatype=IC.コード型,
)
if row[value]
else None
),
),
(
IC.単位表記,
unit if row[value] else None,
),
(
IC.種別,
row[category] if category else None,
),
]
),
),
]
),
)
for value, unit, indicator, category in suryo_keys
],
]
return triples
__all__ = ["GbizInfoShokubaMapper"]

View file

@ -0,0 +1,24 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoTodokedeMapper(GbizInfoKatsudoMapper):
"""届出認定情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = GbizInfoKatsudoMapper.map_to_triples(row)
triples.extend(
[
(ss, RDF.type, HJ.届出認定型),
]
)
return triples
__all__ = ["GbizInfoTodokedeMapper"]

View file

@ -0,0 +1,62 @@
from rdflib import Literal, URIRef
from ..namespace import *
from . import _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoTokkyoMapper(GbizInfoKatsudoMapper):
"""特許情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
ss = HJ_EXT[f"{row['ID-識別値']}_{row['キー情報']}"]
triples = GbizInfoKatsudoMapper.map_to_triples(row)
triples.extend(
[
(ss, RDF.type, HJ.特許型),
# 40
(
ss,
HJ.認定番号,
bpo(
[
(RDF.type, IC.ID型),
(IC.識別値, row["法人活動-認定番号-識別値"]),
]
),
),
# 41
(
ss,
HJ.分類,
bpo(
[
(RDF.type, IC.表記),
(
IC.表記,
row["特許-分類1-表記"],
),
]
),
),
(
ss,
HJ.分類,
bpo(
[
(RDF.type, IC.表記),
(
IC.表記,
row["特許-分類2-表記"],
),
]
),
),
]
)
return triples
__all__ = ["GbizInfoTokkyoMapper"]

View file

@ -0,0 +1,413 @@
from ..namespace import *
from . import Literal, _TripleMapType, bpo
from ._katsudo import GbizInfoKatsudoMapper
class GbizInfoZaimuMapper(GbizInfoKatsudoMapper):
"""財務情報"""
@staticmethod
def map_to_triples(row: dict[str, str]) -> list[_TripleMapType]:
s = HJ_DATA[row["ID-識別値"]]
ss = HJ_EXT[row["キー情報"]]
# 数量コレクション
suryo_keys = [
# 数値, 単位表記, 指標
(
"財務情報-売上高",
"財務情報-売上高ユニット参照",
"http://hojin-info.go.jp/code/財務情報/売上高",
),
(
"財務情報-営業収益",
"財務情報-営業収益ユニット参照",
"http://hojin-info.go.jp/code/財務情報/営業収益",
),
(
"財務情報-営業収入",
"財務情報-営業収入ユニット参照",
"http://hojin-info.go.jp/code/財務情報/営業収入",
),
(
"財務情報-営業総収入",
"財務情報-営業総収入ユニット参照",
"http://hojin-info.go.jp/code/財務情報/営業総収入",
),
(
"財務情報-経常収益",
"財務情報-経常収益ユニット参照",
"http://hojin-info.go.jp/code/財務情報/経常収益",
),
(
"財務情報-正味収入保険料",
"財務情報-正味収入保険料ユニット参照",
"http://hojin-info.go.jp/code/財務情報/正味収入保険料",
),
(
"財務情報-経常利益又は経常損失(△)",
"財務情報-経常利益又は経常損失(△)ユニット参照",
"http://hojin-info.go.jp/code/財務情報/経常利益又は経常損失",
),
(
"財務情報-当期純利益又は当期純損失(△)",
"財務情報-当期純利益又は当期純損失(△)ユニット参照",
"http://hojin-info.go.jp/code/財務情報/当期純利益又は当期純損失",
),
(
"資本金-数値",
"財務情報-資本金ユニット参照",
"http://hojin-info.go.jp/code/財務情報/資本金",
),
(
"財務情報-純資産額",
"財務情報-純資産額ユニット参照",
"http://hojin-info.go.jp/code/財務情報/純資産額",
),
(
"財務情報-総資産額",
"財務情報-総資産額ユニット参照",
"http://hojin-info.go.jp/code/財務情報/総資産額",
),
(
"関連人員-人数",
"財務情報-従業員数ユニット参照",
"http://hojin-info.go.jp/code/財務情報/従業員数",
),
]
triples = [
(s, HJ.法人活動情報, ss),
(ss, RDF.type, HJ.財務型),
# 1
(
ss,
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(IC.体系, IC_ID.corporateNumber),
(IC.識別値, row["ID-識別値"]),
]
),
),
# 2, 3
(
ss,
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.種別, row["名称-種別"]),
(IC.表記, row["名称-表記"]),
]
),
),
# 4, 5
(
ss,
IC.住所,
bpo(
[
(RDF.type, HJ.住所型),
(IC.種別, row["住所-種別"]),
(IC.表記, row["住所-表記"]),
]
),
),
# 6, 7, 8
(
ss,
IC.代表者,
bpo(
[
(RDF.type, IC.構成員型),
(IC.役割, row["代表者-役割"]),
(
IC.構成員,
bpo(
[
(RDF.type, IC.人型),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.種別, row["代表者-表示用種別"]),
(IC.姓名, row["代表者-表示用氏名"]),
]
),
),
(
IC.氏名,
bpo(
[
(RDF.type, IC.氏名型),
(IC.種別, row["代表者-検索用種別"]),
(IC.姓名, row["代表者-検索用氏名"]),
]
),
),
]
),
),
]
),
),
# 9, 10, 11
(
ss,
IC.資本金,
bpo(
[
(RDF.type, IC.金額型),
(IC.数値, Literal(row["資本金-数値"], datatype=XSD.decimal)),
(IC.通貨, row["資本金-通貨"]),
(
IC.通貨コード,
Literal(
row["資本金-通貨コード"],
datatype=ISO4217.ISO3AlphaCurrencyCodeContentType,
),
),
]
),
),
# 12
(
ss,
IC.関連人員,
bpo(
[
(RDF.type, IC.人数型),
(
IC.人数,
Literal(
row["関連人員-人数"], datatype=XSD.nonNegativeInteger
),
),
]
),
),
# 13
(
ss,
HJ.更新日時,
bpo(
[
(RDF.type, IC.日時型),
(
IC.標準型日時,
Literal(
row["更新日時"],
datatype=XSD.dateTime,
),
),
]
),
),
# 14, 15, 16, 17
(
ss,
HJ.公表組織,
bpo(
[
(RDF.type, IC.組織型),
(
IC.ID,
bpo(
[
(RDF.type, IC.ID型),
(
IC.体系,
bpo(
[
(RDF.type, IC.ID体系型),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(
IC.表記,
row["公表組織-ID名称"],
),
]
),
),
(
IC.発行者,
bpo(
[
(RDF.type, IC.組織型),
(
IC.名称,
bpo(
[
(
RDF.type,
IC.名称型,
),
(
IC.表記,
row[
"公表組織-ID発行者"
],
),
]
),
),
]
),
),
]
),
),
(IC.識別値, row["公表組織-ID識別値"]),
]
),
),
(
IC.名称,
bpo(
[
(RDF.type, IC.名称型),
(IC.表記, row["公表組織-名称表記"]),
]
),
),
]
),
),
# 18
(
ss,
HJ.システム名,
bpo([(RDF.type, IC.名称型), (IC.表記, row["システム名"])]),
),
# 19
(ss, HJ.キー情報, row["キー情報"]),
# 20
(ss, HJ.回次, row["財務情報-回次"]),
# 21, 22, 23
*[
(
ss,
HJ.株主情報,
bpo(
[
(RDF.type, HJ.株主情報型),
(
HJ.順位,
Literal(row[f"株主情報{i}-順位"], datatype=XSD.decimal),
),
(IC.表記, row[f"株主情報{i}-氏名又は名称"]),
(
HJ.所有比率,
Literal(
row[
f"株主情報{i}-発行済株式総数に対する所有株式数の割合"
],
datatype=XSD.decimal,
),
),
]
),
)
for i in range(1, 16)
],
# 24, 25, 26
*[
(
ss,
HJ.数量コレクション,
bpo(
[
(RDF.type, HJ.数量コレクション型),
(
HJ.数量,
bpo(
[
(RDF.type, HJ.数量型),
(
IC.数値,
Literal(
row[value],
datatype=XSD.decimal,
),
),
(
HJ.指標,
(
Literal(
indicator,
datatype=IC.コード型,
)
if row[value]
else None
),
),
(IC.単位表記, row[unit]),
]
),
),
]
),
)
for value, unit, indicator in suryo_keys
],
# 27, 28, 29, 30, 31, 32
(
ss,
HJ.書類情報,
bpo(
[
(RDF.type, IC.文書型),
(IC.ID, row["書類情報-書類管理番号"]),
(
IC.種別コード,
bpo(
[
(RDF.type, IC.コード型),
(IC.識別値, row["書類情報-書類種別コード"]),
]
),
),
(
IC.日付,
bpo(
[
(RDF.type, IC.日付型),
(IC.標準型日付, row["書類情報-提出日"]),
(
IC.種別,
"提出日" if row["書類情報-提出日"] else None,
),
]
),
),
(
IC.記述,
bpo(
[
(RDF.type, IC.記述型),
(IC.説明, row["書類情報-事業年度"]),
(
IC.種別,
(
"事業年度"
if row["書類情報-事業年度"]
else None
),
),
]
),
),
]
),
),
]
return triples
__all__ = ["GbizInfoZaimuMapper"]

24
gbizinfo_lod/namespace.py Normal file
View file

@ -0,0 +1,24 @@
from rdflib import Namespace
from rdflib.namespace import RDF, XSD
IC = Namespace("http://imi.go.jp/ns/core/rdf#")
IC_ID = Namespace("http://imi.go.jp/ns/code_id/id/")
HJ = Namespace("http://hojin-info.go.jp/ns/domain/biz/1#")
HJ_DATA = Namespace("http://hojin-info.go.jp/data/")
HJ_BASIC = Namespace("http://hojin-info.go.jp/data/basic/")
HJ_EXT = Namespace("http://hojin-info.go.jp/data/ext/")
ISO4217 = Namespace(
"urn:un:unece:uncefact:codelist:standard:ISO:ISO3AlphaCurrencyCode:2012-08-31#"
)
__all__ = [
"RDF",
"XSD",
"IC",
"IC_ID",
"HJ",
"HJ_DATA",
"HJ_BASIC",
"HJ_EXT",
"ISO4217",
]

368
poetry.lock generated Normal file
View file

@ -0,0 +1,368 @@
# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand.
[[package]]
name = "black"
version = "24.4.2"
description = "The uncompromising code formatter."
optional = false
python-versions = ">=3.8"
files = [
{file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"},
{file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"},
{file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"},
{file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"},
{file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"},
{file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"},
{file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"},
{file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"},
{file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"},
{file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"},
{file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"},
{file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"},
{file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"},
{file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"},
{file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"},
{file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"},
{file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"},
{file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"},
{file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"},
{file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"},
{file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"},
{file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"},
]
[package.dependencies]
click = ">=8.0.0"
mypy-extensions = ">=0.4.3"
packaging = ">=22.0"
pathspec = ">=0.9.0"
platformdirs = ">=2"
[package.extras]
colorama = ["colorama (>=0.4.3)"]
d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"]
jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
uvloop = ["uvloop (>=0.15.2)"]
[[package]]
name = "certifi"
version = "2024.6.2"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
{file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"},
{file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"},
]
[[package]]
name = "charset-normalizer"
version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
optional = false
python-versions = ">=3.7.0"
files = [
{file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
{file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
{file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
{file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
{file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
{file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
{file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
{file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
{file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
{file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
{file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
{file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
{file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
{file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
{file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
{file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
{file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
{file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
{file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
{file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
{file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
{file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
{file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
{file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
{file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
{file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
{file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
]
[[package]]
name = "click"
version = "8.1.7"
description = "Composable command line interface toolkit"
optional = false
python-versions = ">=3.7"
files = [
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
]
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
[[package]]
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
]
[[package]]
name = "idna"
version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.5"
files = [
{file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
{file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
]
[[package]]
name = "isodate"
version = "0.6.1"
description = "An ISO 8601 date/time/duration parser and formatter"
optional = false
python-versions = "*"
files = [
{file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"},
{file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"},
]
[package.dependencies]
six = "*"
[[package]]
name = "isort"
version = "5.13.2"
description = "A Python utility / library to sort Python imports."
optional = false
python-versions = ">=3.8.0"
files = [
{file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"},
{file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"},
]
[package.extras]
colors = ["colorama (>=0.4.6)"]
[[package]]
name = "joblib"
version = "1.4.2"
description = "Lightweight pipelining with Python functions"
optional = false
python-versions = ">=3.8"
files = [
{file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"},
{file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"},
]
[[package]]
name = "mypy-extensions"
version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker."
optional = false
python-versions = ">=3.5"
files = [
{file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
{file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
]
[[package]]
name = "packaging"
version = "24.1"
description = "Core utilities for Python packages"
optional = false
python-versions = ">=3.8"
files = [
{file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
{file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
]
[[package]]
name = "pathspec"
version = "0.12.1"
description = "Utility library for gitignore style pattern matching of file paths."
optional = false
python-versions = ">=3.8"
files = [
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
]
[[package]]
name = "platformdirs"
version = "4.2.2"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
files = [
{file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"},
{file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"},
]
[package.extras]
docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
type = ["mypy (>=1.8)"]
[[package]]
name = "pyparsing"
version = "3.1.2"
description = "pyparsing module - Classes and methods to define and execute parsing grammars"
optional = false
python-versions = ">=3.6.8"
files = [
{file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"},
{file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"},
]
[package.extras]
diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "rdflib"
version = "7.0.0"
description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information."
optional = false
python-versions = ">=3.8.1,<4.0.0"
files = [
{file = "rdflib-7.0.0-py3-none-any.whl", hash = "sha256:0438920912a642c866a513de6fe8a0001bd86ef975057d6962c79ce4771687cd"},
{file = "rdflib-7.0.0.tar.gz", hash = "sha256:9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae"},
]
[package.dependencies]
isodate = ">=0.6.0,<0.7.0"
pyparsing = ">=2.1.0,<4"
[package.extras]
berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"]
html = ["html5lib (>=1.0,<2.0)"]
lxml = ["lxml (>=4.3.0,<5.0.0)"]
networkx = ["networkx (>=2.0.0,<3.0.0)"]
[[package]]
name = "requests"
version = "2.32.3"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.8"
files = [
{file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
{file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
]
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
[package.extras]
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
[[package]]
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
[[package]]
name = "urllib3"
version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.8"
files = [
{file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"},
{file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"},
]
[package.extras]
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
h2 = ["h2 (>=4,<5)"]
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
zstd = ["zstandard (>=0.18.0)"]
[metadata]
lock-version = "2.0"
python-versions = "^3.12"
content-hash = "4c0bebaca0aced4b18e0dd6ccaaa573a0f7269a72f236e0896848598c5da1268"

25
pyproject.toml Normal file
View file

@ -0,0 +1,25 @@
[tool.poetry]
name = "gbizinfo-lod"
version = "0.1.0"
description = "A tool to generate LOD datasets for gBizINFO"
authors = ["Babibubebon <babibubebon@babibubebo.org>"]
license = "MIT"
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.12"
requests = "^2.32.2"
click = "^8.1.7"
rdflib = "^7.0.0"
joblib = "^1.4.2"
[tool.poetry.group.dev.dependencies]
black = "^24.4.2"
isort = "^5.13.2"
[tool.poetry.scripts]
gbilod = "gbizinfo_lod.command:cli"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"