RSSフィードからJSON Schemaを推論する

チャンネルメタデータ、繰り返しアイテム要素、属性と要素コンテンツの混合を含むRSS 2.0フィードXMLからJSON Schemaを生成します。

Real-World XML

詳細な説明

RSSフィードのスキーマ推論

RSS(Really Simple Syndication)はWeb上で最も一般的なXMLフォーマットの1つです。RSSをJSON Schemaに変換することは、フィードリーダー、アグリゲーター、コンテンツパイプラインの構築に有用です。

RSS 2.0フィードの例

<rss version="2.0">
  <channel>
    <title>Tech Blog</title>
    <link>https://example.com</link>
    <description>Latest tech articles</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 01 Jan 2024 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Getting Started with TypeScript</title>
      <link>https://example.com/typescript</link>
      <description>A beginner guide to TypeScript</description>
      <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
      <guid>https://example.com/typescript</guid>
      <category>Programming</category>
    </item>
    <item>
      <title>Understanding JSON Schema</title>
      <link>https://example.com/json-schema</link>
      <description>Deep dive into JSON Schema</description>
      <pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate>
      <guid>https://example.com/json-schema</guid>
      <category>Data</category>
    </item>
  </channel>
</rss>

スキーマの主要な特徴

  1. ルート属性: <rss>version属性が@versionになる
  2. チャンネルオブジェクト: メタデータフィールドとアイテム配列を含む
  3. アイテム配列: 複数の<item>要素が配列として検出される
  4. マージされたアイテムスキーマ: すべてのアイテムフィールドが単一のアイテム型にまとめられる
  5. すべて文字列: RSSの日付とURLは文字列(JSON Schemaに特別な日付/URL型はない)

チャンネルとアイテムの構造

スキーマはチャンネルレベルのメタデータ(titlelinkdescriptionlanguage)とアイテムレベルのプロパティを明確に分離します。この区別はフィード処理アプリケーションにとって重要です。

スキーマの拡張

生成されたスキーマは堅固な基盤を提供します。本番使用では以下を追加できます:

  • linkとguidプロパティにformat: "uri"を追加
  • pubDateとlastBuildDateにformat: "date-time"を追加
  • 既知のカテゴリにenum値を追加
  • 特定のフィールドをrequiredとしてマーク(titleとlinkは通常RSSで必須)

Atomフィード

同じアプローチはAtomフィードでも機能しますが、構造が異なります。Atomはより多くの属性を使用し(例:<link rel="alternate" href="..."/>)、異なる要素名を持ちます。

ユースケース

RSSフィードリーダー、アグリゲーター、XMLからJSONに変換した後のフィードデータをバリデーションする必要があるコンテンツシンジケーションシステムを構築する場合。スキーマは期待されるフィード構造のドキュメントとバリデーションとして機能します。

試してみる — XML to JSON Schema

フルツールを開く