XMLサイトマップファイルからスキーマを推論する

URLエントリ、更新頻度、優先度、サイトマップインデックス構造を持つXMLサイトマップファイルからJSON Schemaを生成します。

Real-World XML

詳細な説明

XMLサイトマップからJSON Schemaへ

XMLサイトマップは検索エンジンがWebサイトのページを発見しインデックスするために使用されます。明確に定義された構造に従いますが、オプションフィールドにはいくつかのバリエーションがあります。

サイトマップの例

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2024-01-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://example.com/about</loc>
    <lastmod>2024-01-10</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
  <url>
    <loc>https://example.com/blog</loc>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
  </url>
</urlset>

生成されるスキーマ

{
  "type": "object",
  "properties": {
    "urlset": {
      "type": "object",
      "properties": {
        "url": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "loc": { "type": "string" },
              "lastmod": { "type": "string" },
              "changefreq": { "type": "string" },
              "priority": { "type": "number" }
            }
          }
        }
      }
    }
  }
}

スキーマの洞察

  • URL配列: 複数の<url>要素が正しく配列になる
  • 数値としての優先度: 1.00.80.9のような値がnumberとして検出される
  • オプションフィールド: 一部のエントリにlastmodがない場合(上記の3番目のURL)、required検出はそれを含めない
  • 文字列としての日付: lastmod値はJSON Schemaにネイティブの日付型がないためstringのまま

サイトマップインデックス

同じアプローチはサイトマップインデックスファイルにも機能します:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-posts.xml</loc>
    <lastmod>2024-01-15</lastmod>
  </sitemap>
</sitemapindex>

スキーマの拡張

本番使用では以下を追加します:

  • locformat: "uri"
  • changefreqenum: ["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"]
  • priorityminimum: 0.0, maximum: 1.0
  • lastmodformat: "date"

ユースケース

サイトマップジェネレーター、バリデーター、サイトマップの構造を検証する必要があるSEOツールを構築する場合。スキーマにより、検索エンジンへの提出前に生成されたサイトマップが期待される形式に準拠していることをバリデーションできます。

試してみる — XML to JSON Schema

フルツールを開く