Maven POM XMLからJSON Schemaを生成する

依存関係配列、ビルド設定のネスト、Javaプロジェクトで使用されるプロパティセクションを持つMaven POMファイルからJSON Schemaを推論します。

Real-World XML

詳細な説明

Maven POM.xmlからJSON Schemaへ

Maven POM(Project Object Model)ファイルはJavaプロジェクト設定の基盤です。POM XMLをJSON Schemaに変換することは、バリデーション、ツーリング、設定管理に有用です。

POMの例

<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0.0</version>
  <packaging>jar</packaging>
  <properties>
    <java.version>17</java.version>
    <spring.version>6.1.0</spring.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>6.1.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>5.10.0</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

スキーマの主要な観察

  1. 数値としてのバージョン: <modelVersion>4.0.0</modelVersion>numberとして検出され、1.0.0のようなセマンティックバージョンも小数形式のためnumberとして検出される
  2. プロパティセクション: <java.version>17</java.version>はinteger型を生成
  3. 依存関係配列: 複数の<dependency>要素が配列を形成
  4. 依存関係アイテムスキーマ: すべての依存関係フィールドが統一スキーマにマージされる

生成される依存関係スキーマ

{
  "dependency": {
    "type": "array",
    "items": {
      "type": "object",
      "properties": {
        "groupId": { "type": "string" },
        "artifactId": { "type": "string" },
        "version": { "type": "number" },
        "scope": { "type": "string" }
      },
      "required": ["groupId", "artifactId", "version", "scope"]
    }
  }
}

POM固有の考慮事項

  • Maven POMはbuild、plugins、profilesなどの既知のセクションを持つ明確に定義された構造です
  • 生成されるスキーマはサンプルに存在するセクションをカバーします
  • 包括的なスキーマには、すべてのセクションが含まれるPOMを貼り付けてください
  • ドット付きプロパティ名(java.version)は単一のプロパティ名として扱われます

POMを超えて

同じアプローチは他のJava/JVM設定XMLファイルにも機能します:Gradle設定、Spring XML beans、Hibernateマッピングファイル、web.xml、Log4j設定など。

ユースケース

POMファイルバリデーター、Mavenリポジトリツール、依存関係管理システムを構築する場合。スキーマにより、処理前にPOMファイルが必要な構造を含んでいることをバリデーションしたり、POM操作ツール用のTypeScript型を生成できます。

試してみる — XML to JSON Schema

フルツールを開く