Lawtext query は、ブラウザのコンソールとjavascriptを利用した高度な検索機能です。Lawtext query を使用すると、法令XMLの構造や正規表現を利用した法令検索ができます。
Lawtextの画面でブラウザのコンソールを開きます。
Google Chrome の場合(Windowsなど: Ctrl+Shift+J, Mac: Cmd+Option+J)
Firefox の場合(Windowsなど: Ctrl+Shift+K,Mac: Cmd+Option+K)
コンソールに Lawtext query を使用する javascriptコードを入力して実行します。(コードの例)
Lawtext query の検索に用いるデータは、e-Gov 法令API とオフライン用データの2種類のどちらかを選択します。
e-Gov 法令API: lawtext.queryViaAPI() を使用した場合は、e-Gov法令APIからデータを取得します。e-Gov 法令APIにアクセスできる環境があれば事前の準備なく利用できます。ただし、データをインターネット経由で毎回取得するため、実行に時間がかかる場合があります。
オフライン用データ: lawtext.query() を使用した場合は、オフライン用データを利用します。ダウンロード版Lawtextでオフライン用データを保存している場合に使用できます。多くの場合、e-Gov 法令APIを使用する方法よりも高速です。
/^平成.{1,3}年法律/
にマッチする法令の法令番号と法令名を、順不同で10件表示lawtext
.queryViaAPI({ LawNum: /^平成.{1,3}年法律/ })
.limit(10)
.toArray()
.then(a => console.table(a, ["LawNum", "LawTitle"]));
.assignDocument() によりXMLのDOMを順次取得するため時間がかかります。
lawtext
.queryViaAPI({ LawNum: /^.{3,5}年法律/ })
.assignDocument()
.assign(law => ({
els: Array.from(law.document.getElementsByTagName("EnactStatement")),
}))
.filter(law => law.els.length > 0)
.limit(10)
.forEach(law => {
console.group(`📘 ${law.LawTitle}(${law.LawNum})`);
for (const el of law.els) {
console.log(el.outerHTML);
}
console.log(lawtext.getLawtextAppUrl(law));
console.groupEnd();
})
.then(() => "✓ completed.");
.assignDocument() によりXMLのDOMを順次取得するため時間がかかります。
lawtext
.queryViaAPI({ LawNum: /政令/ })
.assignDocument()
.assign(law => ({
els: Array.from(law.document.getElementsByTagName("Fig")),
}))
.filter(law => law.els.length > 0)
.limit(10)
.forEach(law => {
console.group(`📘 ${law.LawTitle}(${law.LawNum})`);
for (const el of law.els) {
console.log(lawtext.traceTitles(el));
}
console.log(lawtext.getLawtextAppUrl(law));
console.groupEnd();
})
.then(() => "✓ completed.");
/の意[義味].*に定めるところによる/
にマッチする文を含む本文タグを検索し、タグ内の文言が重複しないものを見つかり次第10件まで出力(途中経過を表示しない).assignDocument() によりXMLのDOMを順次取得するため時間がかかります。
(async () => {
const set = new Set();
return lawtext
.queryViaAPI()
.assignDocument()
.while(() => set.size < 10)
.forEach(law => {
for (const tag of lawtext.lawUtil.paragraphItemSentenceTags) {
for (const el of Array.from(law.document.getElementsByTagName(tag))) {
const text = (el.textContent ?? "").trim();
if (/の意[義味].*に定めるところによる/.exec(text) && !set.has(text)) {
console.group(`【${law.LawTitle}(${law.LawNum})${lawtext.traceTitles(el).join("/")}】`);
console.log(`%c${text}`, "color: navy;");
console.log(lawtext.getLawtextAppUrl(law));
console.groupEnd();
set.add(text);
}
}
}
})
.then(() => "✓ completed.");
})();
.assignDocument() によりXMLのDOMを順次取得するため時間がかかります。
lawtext
.queryViaAPI({ LawNum: /^.{3,5}年法律/ })
.assignDocument()
.assign(law => {
const articles = Array.from(law.document.getElementsByTagName("Article"));
const noNumPhsArticles = [];
for (const article of articles) {
const paragraphs = Array.from(article.querySelectorAll(":scope > Paragraph"));
if (paragraphs.length >= 2 && paragraphs.every(p => {
const num = p.querySelector(":scope > ParagraphNum");
return p.getAttribute("OldNum") !== "true" && (!num || !num.innerHTML);
})) noNumPhsArticles.push(article);
}
return { noNumPhsArticles };
})
.filter(law => law.noNumPhsArticles.length > 0)
.limit(10)
.forEach(law => {
console.group(`📘 ${law.LawTitle}(${law.LawNum})`);
for (const article of law.noNumPhsArticles) {
console.log(article.outerHTML);
}
console.log(lawtext.getLawtextAppUrl(law));
console.groupEnd();
})
.then(() => "✓ completed.");