rayne / wz2008-graph
解析联邦统计局发布的“经济活动分类”(wz2008),构建多个分层结构的树。
Requires
- php: >=5.6
- ext-simplexml: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpbench/phpbench: ^0.16.9
- phpunit/phpunit: ^5.0|^7.0|^8.0
README
Rayne/wz2008-graph 解析联邦统计局发布的“经济活动分类”。它从具有隐含层次结构的扁平文件结构中构建多个分层结构和面向对象的内存树。
内容
包描述(德语)
这个库从《2008年经济活动分类(WZ 2008)》中提取隐含的分层结构。作为数据基础,使用完整的分类作为XML文件。
《2008年经济活动分类(WZ 2008)》是在行政、经济、研究和社会数据使用者及生产者的大力参与下创建的,旨在统一记录所有官方统计数据中的企业、企业和其他统计单位的经营活动。它考虑了欧洲共同体(NACE Rev. 2)经济部门的统计系统要求,这些要求是根据2006年12月20日欧洲议会和理事会第1893/2006号条例(公报 L 393 S. 1)发布的,并基于联合国《国际标准工业分类》(ISIC Rev. 4)。根据上述条例第4条第3款,欧洲委员会的同意已经获得。
根据上述条例第8条,WZ 2008在统计目的上的应用产生。据此,自2008年1月1日起进行的经济活动(报告期)的统计数据应根据NACE Rev. 2(在德国应根据WZ 2008)编制。与此不同,根据条例(EG) No 1165/98的经济统计数据和自2009年1月1日起的工作成本指数应根据条例(EG) No 450/2003编制。自2008/2009年起,以下统计数据不适用:根据条例(EG) No 2223/96的经济总体统计、根据条例(EG) No 138/2004的农业总体统计以及根据条例(EG) No 184/2005的支付平衡、国际服务贸易和直接投资统计。这些统计数据将在稍后的时间采用NACE Rev. 2 / WZ 2008。
来源:https://www.klassifikationsserver.de/klassService/index.jsp?variant=wz2008
依赖项
生产
- PHP 5.6 或更高版本
开发
- Composer
- Git
- PHPUnit
许可
-
该库在 MIT 许可 下发布。
-
随附的
/assets/WZ2008-[…].xml文件是 联邦统计局(联邦统计局),威斯巴登,分类部门 的知识产权。File content: Classification (complete) Further information: https://www.klassifikationsserver.de/ Copyright: © Statistisches Bundesamt, Wiesbaden 2008 Distribution (also in parts) permitted, provided that the source is mentioned. Owner: Issued by: Statistisches Bundesamt (Federal Statistical Office), Wiesbaden, Section „Classifications“, Phone.: 0611/75-2510, -2294, -2280, Fax: 0611/75-3953, E-Mail: wz@destatis.de Type: 'ex' = Part of (see help of the classification server)
设置
下载Composer 并安装 rayne/wz2008-graph。
composer require rayne/wz2008-graph
替代方案
基准
建议直接调用phpbench程序,而不是使用提供的composer bench脚本。后者将在五分钟后终止基准测试。
./vendor/bin/phpbench run
测试
-
克隆仓库
git clone https://github.com/rayne/wz2008-graph.git
-
安装开发依赖项
composer install --dev --prefer-dist
-
运行测试
composer test
用法
use Rayne\wz2008\Graph\Factory\WzClassificationFactory; use Rayne\wz2008\Graph\WzClassificationInterface; /** * @var WzClassificationInterface $classification */ // Load the library's classification file … $classification = WzClassificationFactory::build(); // … or load a custom classification file. $classification = WzClassificationFactory::buildFromFile( 'WZ2008-2016-07-29-Classification_(complete).xml');
通过ID搜索WzItem
use Rayne\wz2008\Graph\WzClassificationInterface; use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzClassificationInterface $classification * @var WzItemInterface $item */ $id = '26.20.0'; if ($classification->has($id)) { $item = $classification->get($id); }
遍历WzItems
可以相对于给定的WzItemInterface对象遍历父项和子项。每个项目都有介于1和5之间的层次级别。WzItemInterface提供了以下可读的常量。
遍历父项
获取直接父项或向上遍历一个级别。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var WzItemInterface|null $parent */ $parent = $item->getParent();
获取特定级别的父项或向上移动到特定级别。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var WzItemInterface|null $parent */ $parent = $item->getParentByLevel($item::LEVEL_SECTION);
遍历子项
获取所有直接子项。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var WzItemInterface[] $children */ $children = $item->getChildren();
通过特定级别获取所有子项。跳过其他级别的子项。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var WzItemInterface[] $children */ $children = $item->getChildrenByLevel($item::LEVEL_CLASS);
按级别筛选WzItems
获取所有具有特定级别的WzItemInterface项目。
use Rayne\wz2008\Graph\WzClassificationInterface; use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzClassificationInterface $classification * @var WzItemInterface[] $sections */ $sections = $classification->getItemsByLevel(WzItemInterface::LEVEL_SECTION);
获取翻译标签
WzItemInterface在给定的语言代码没有翻译时抛出InvalidArgumentException。官方XML文件仅限于DE和EN。
WzItemInterface->getLabel($langCode)中的$langCode不区分大小写。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var string $label */ $label = $item->getLabel('de');
获取所有翻译标签及其语言代码。
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item * @var string[] $labels */ $labels = $item->getLabels();
WzItemInterface->getLabels()返回简单的键(语言代码)值(翻译标签)映射。
$labels = [ 'de' => 'Wirtschafts- und Arbeitgeberverbände', 'en' => 'Activities of business and employers membership organisations', ];
获取WzItem ID
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item */ $item->getId();
获取WzItem级别
use Rayne\wz2008\Graph\WzItemInterface; /** * @var WzItemInterface $item */ $item->getLevel();
自定义数据集
-
下载一个
WZ2008-20XX-XX-XX-Classification_(complete).xml文件-
访问klassifikationsserver.de/klassService/index.jsp?variant=wz2008
-
在下载矩阵中找到
ZIP下载的位置("Klassifikation komplett", "XML (Claset)") -
解压下载的
ZIP文件
-
-
使用工厂根据下载的XML文件构建一个
WzClassificationInterface对象use Rayne\wz2008\Graph\Factory\WzClassificationFactory; use Rayne\wz2008\Graph\WzClassificationInterface; /** * @var WzClassificationInterface $classification */ $classification = WzClassificationFactory::buildFromFile( 'WZ2008-2016-07-29-Classification_(complete).xml');
