Lawtext query
    Preparing search index...

    Lawtext query

    Lawtext query の使用方法

    Lawtext query は、ブラウザのコンソールとjavascriptを利用した高度な検索機能です。Lawtext query を使用すると、法令XMLの構造や正規表現を利用した法令検索ができます。

    1. Lawtextの画面でブラウザのコンソールを開きます。

    2. コンソールに 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を使用する方法よりも高速です。

    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.");

    .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.");