miqwit / dedex
解析 DDEX ERN 文件并提供方便的 API 来使用它
Requires
- php: ^7.2|^8.0
- ext-ctype: *
- ext-iconv: *
- goetas-webservices/xsd2php-runtime: v0.2.16
- symfony/console: ^2.7|^3.0|^4.0|^5.0|^6.0
- symfony/dotenv: ^4.0|^5.0|^6.0
- symfony/flex: ^1.18
- symfony/framework-bundle: ^4.0|^5.0|^6.0
- symfony/http-kernel: ^4.0|^5.1.5|^6.0
- symfony/yaml: ^2.2|^3.0|^4.0|^5.0|^6.0
Requires (Dev)
- goetas-webservices/xsd2php: ^0.4.4
- phpunit/phpunit: ^9.5
- symfony/maker-bundle: ^1.14
- symfony/phpunit-bridge: ^6.1
Conflicts
This package is auto-updated.
Last update: 2024-09-24 18:31:59 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 的架构、标准文本和支持信息将保留。