miqwit/dedex

解析 DDEX ERN 文件并提供方便的 API 来使用它

安装: 12,015

依赖项: 0

建议者: 0

安全性: 0

星标: 23

关注者: 5

分支: 11

开放问题: 5

类型:symfony-bundle

2.0.7 2024-06-04 07:50 UTC

README

DeDEX 是一个 DDEX XML 文件解析器。DDEX 是音乐行业中用于交付丰富媒体内容的标准。更多信息请访问 ddex.net。这仅涵盖 ERN(电子发行通知)标准,适用于 3.8.2 和 4.1 版本。

在我的开发经验中,我总是需要开发或增强 DDEX 解析器以处理 ERN。我创建了一个非常方便使用的解析器,就像我一直希望的那样。

规则机制非常有用且灵活。DDEX ERN 标准非常庞大,有多种使用方式。大多数供应商生成一个简化但全面的 XML 文件,涵盖大部分需求。规则帮助在解析过程中检查 XML 不仅是有效的,还包含最小一致的信息。

可以实施自己的规则(如果您认为其他开发者可以使用它,请为此存储库做出贡献),并为不同的供应商实施不同的规则集。

例如,可以强制要求对于给定的 XML,所有录音都提供了 ISRC,但不适用于另一种录音。供应商规则可以建模在 规则集 中。

如果您觉得这个项目有用,请给它加星标。

此存储库提供了 简单实体,它们在解析第一个 XML 文件时非常有用。它们提供了一个带有附加的曲目、艺术家和交易的专辑的简化模型。您可以忽略简单实体,构建自己的实体集或超集以满足您的需求。请注意,简单实体对 DDEX 的使用有限。在使用前请仔细阅读文档。

安装

composer require miqwit/dedex

使用方法

将 DDEX 文件转换为 SimpleAlbum

use DedexBundle\Controller\ErnParserController;
use DedexBundle\Simplifiers\SimpleAlbum;

$xml_path = "tests/samples/with_assets/004_complete/1199119911991.xml";
$parser = new ErnParserController();
$ern = $parser->parse($xml_path);
$album = new SimpleAlbum($ern);

// Then you can access high level property of this album
$release_date = $album->getOriginalReleaseDate();
$artists_at_album_level = $album->getArtists();
$tracks_for_cd_1 = $album->getTracksPerCd()[1];

// You can also access exact XML mapping by getting 
// ddex objects at album or track level
$ddex_release = $album->getDdexRelease();
$ddex_release->getReleaseId()[0]->getICPN()->value(); // direct access
$ddex_track = $tracks_for_cd_1[1]->getDdexSoundRecording()->getDuration(); // direct access

不进行 XSD 验证的解析

use DedexBundle\Controller\ErnParserController;

$xml_path = "tests/samples/001_audioalbum_complete.xml";
$parser = new ErnParserController();
$ern = $parser->parse($xml_path);

// Then you can access properties of the ERN
$created_at = $ern->getMessageHeader()->getMessageCreatedDateTime();

进行 XSD 验证的解析

XSD 验证将加载所有 XML 和 XSD 到内存中,这使得这个库效率较低。请谨慎使用。不适合处理巨大文件。

use DedexBundle\Controller\ErnParserController;

$xml_path = "tests/samples/001_audioalbum_complete.xml";
$parser = new ErnParserController();
$parser->setXsdValidation(true);
$ern = $parser->parse($xml_path);

使用规则进行解析

use DedexBundle\Controller\ErnParserController;
use DedexBundle\Rule\AtLeastOneImage;
use DedexBundle\Exception\RuleValidationException;

$xml_path = "tests/samples/001_audioalbum_complete.xml";
$parser = new ErnParserController();
$parser->addRule(new AtLeastOneImage(Rule::LEVEL_ERROR));
// ... can add multiple rules one by one
// ... or multiple rules with $parser->addRuleSet([])
$ern = $parser->parse($xml_path);  // will raise an RuleValidationException if rule is broken

解析器配置

以下是解析器的一些实用函数。

$parser=new ErnParserController();

$parser->setDisplayLog(true);

显示解析日志。主要用于调试。(默认:false

$parser->setXsdValidation(true);

验证 XML 是否与 XSD 匹配。(默认:false 因为会加载 XSD 和 XML 到内存中)

$parser->getRuleMessages();

返回所有由规则检查生成的错误格式化字符串(带换行符)。在解析完成后调用。如果 ERROR 规则之一失败,解析器将抛出包含这些信息的异常。如果解析期间只引发 WARNING,此函数是读取它们的唯一方式。

$parser->addRuleSet();

存储一组规则(数组)。例如,每个供应商可以检查特定的规则集。

标准更新

2024 年 9 月的官方电子邮件

从 2025 年 3 月 1 日起,所有版本 3 以及版本 4.0 的电子发行通知标准、它们各自的配置文件和编排将不再受支持。这意味着从那天起,不再对这些 ERN 标准版本进行更新、错误修复或 AVS 添加。此外,ERN-3 和 ERN 4.0 的 XML 架构以及所有关于 ERN 的文章或实施建议将从所有 DDEX 网站上移除。所有关于 ERN-4.1、4.2 以及当然,4.3.1 的架构、标准文本和支持信息将保留。