作为Zope词汇表的IMS VDEX词汇表
项目描述
这个包做什么?
IMS VDEX 是一个词汇表交换标准。 collective.vdexvocabulary 在 vdex 词汇表和 zope 词汇表 (zope.schema.vocabularies) 之间架起桥梁,因此您可以轻松地在 Plone/Zope、Pyramid 或任何其他支持 Zope-Toolkit 的系统中使用它。
它有什么特别之处?
collective.vdexvocabulary 包含两种不同类型的词汇表
如果你有包含大量关系的词汇表,比如有 +10,000 个术语和 +30,000 个关系的词汇表,那么使用 collective.vdexvocabulary 的 VdexVocabulary 类型将是一个完美的用例。
如果你有类似树状结构的词汇表,这也非常适用。 TreeVocabulary 支持嵌套/层次化的词汇表。
还有其他一些其他词汇包不支持的功能(例如,适用于 Plone/Zope)
国际化支持。IMS VDEX 支持在 VDEX-XML 文件中的翻译,两种词汇类型都支持这种翻译方式。
正确顺序也适用于 Unicode 字符(如果安装了 zope.ucol,则仅限 vdexvocabulary)。如果 VDEX 是顺序相关的,则取由 vdex 文件给出的顺序(两种词汇类型都支持)。
使用 zcml 方式轻松注册
关系按照 IMS VDEX 标准指定(目前仅限 VdexVocabulary)
我该如何使用它?
配置
在你的 configure.zcml 中添加以下内容
<configure ... xmlns:vdex="http://namespaces.zope.org/vdex" ...> <include package="collective.vdexvocabulary" file="meta.zcml" /> <include package="collective.vdexvocabulary" />
要注册一个 vdex 词汇,只需添加以下行,指向包含 vdex 词汇的文件
<configure ... xmlns:vdex="http://namespaces.zope.org/vdex" ...> <vdex:vocabulary file="path-to/very-interesting.xml" />
或者对于树状词汇
<vdex:treevocabulary file="path-to/very-interesting-tree.xml" />
为了让词汇表的注册更加简单,你还可以注册多个词汇表,只需指定目录
<configure ... xmlns:vdex="http://namespaces.zope.org/vdex" ...> <vdex:vocabulary directory="path-to/my-vdex-vocabularies" />
或者对于树状词汇
<vdex:treevocabulary directory="path-to/my-vdex-vocabularies" />
位于 path-to/my-vdex-vocabularies 目录中的 vdex 文件应该以 .vdex 结尾,以便被 vdex:vocabulary ZCML 指令识别。
有时你不想在代码树内部有 VDEX 文件。因此,可以提供一个环境变量来定义基本目录
<vdex:vocabulary file="my-vocabulary.vdex: environment="VDEX_BASE_DIR" />
或者对于树状词汇
<vdex:treevocabulary file="my-vocabulary.vdex: environment="VDEX_BASE_DIR" />
在运行带有环境变量相对文件名/目录的代码之前,必须设置环境变量,例如,执行 export VDEX_BASE_DIR=/home/joe/vdex/ 以使其在 /home/joe/vdex/my-vocabulary.vdex 中查找 vdex。
在代码中的使用
词汇表以 zope-toolkit 方式的实用程序命名。名称来自 vdex 文件,它是 vocabIdentifier。
给定一个名称为 beeeurope 的词汇表(见下面的树状示例),必须使用 zope 组件架构方式获取该实用程序
>>> from zope.component import getUtility >>> from zope.schema.interfaces import IVocabularyFactory >>> factory = zope.component.getUtility(IVocabularyFactory, 'beeeurope')
工厂在调用时返回一个词汇表。它期望一个上下文,在我们的情况下可以是 None。如果你在一个应用服务器中,请在这里传递你的当前上下文。对于平面词汇表,这用于检测语言,对于树状词汇表,则忽略它,这里使用更高级的方法来支持国际化
>>> context = None >>> vocabulary = factory(context)
现在你可以使用这个词汇表了
>>> for term in vocabulary: ... print term.value ... print term.token ... print term.title ... print term.description
如何使用树状词汇表
一旦如上所示进行了查找,遍历树就变得简单了。它按照 zope.schema.interfaces.ITreeVocabulary 中定义的方式工作。术语也是子级别的键
>>> def printlevel(leveldict, ident=0): ... for term in leveldict: ... print indent * ' ' + term.title ... printlevel(leveldict[term], indent+1)
提示:collective.dynatree 使用这种类型的词汇,也可以用作自己实现的示例。
如何访问关系(从代码中)
关系由 ISO2788 定义。
要从上面的 VDEX 示例中获取宝马汽车型号列表,你必须
>>> from zope.schema.vocabulary import getVocabularyRegistry >>> vr = getVocabularyRegistry() >>> car_manufacturers = vr.get(self.context, 'your.package.car_manufacturers') >>> car_models = vr.get(self.context, 'your.package.car_models') >>> bmw = car_manufacturers.getTerm('bmw') >>> bmw_car_models = bmw.related.get('NT', [])
示例 VDEX 文件
带有关系的平面文件
汽车制造商列表示例(car_manufacturers.vdex)。
<?xml version="1.0" encoding="utf-8"?> <vdex xmlns="http://www.imsglobal.org/xsd/imsvdex_v1p0" orderSignificant="false" language="en"> <vocabIdentifier>your.package.car_manufacturers</vocabIdentifier> <term> <termIdentifier>ford</termIdentifier> <caption> <langstring language="en">Ford</langstring> <langstring language="es">Una miedra de coche</langstring> </caption> </term> <term> <termIdentifier>bmw</termIdentifier> <caption> <langstring language="en">BMW</langstring> <langstring language="es">Be-eMe-uWe, mierda</langstring> </caption> </term> <relationship> <sourceTerm>bmw</sourceTerm> <targetTerm vocabIdentifier="your.package.car_models">very-special-bmw-model</targetTerm> <relationshipType source="http://www.imsglobal.org/vocabularies/iso2788_relations.xml">NT</relationshipType> </relationship> ... </vdex>
汽车型号列表(car_models.vdex)。
<?xml version="1.0" encoding="utf-8"?> <vdex xmlns="http://www.imsglobal.org/xsd/imsvdex_v1p0" orderSignificant="false" language="en"> <vocabIdentifier>your.package.car_models</vocabIdentifier> <term> <termIdentifier>very-special-bmw-model</termIdentifier> <caption> <langstring language="en">Very special BMW model</langstring> <langstring language="es">Un modelo de Be-eMe-uWe</langstring> </caption> </term> <relationship> <sourceTerm>very-special-bmw-model</sourceTerm> <targetTerm vocabIdentifier="your.package.car_manufacturers">bmw</targetTerm> <relationshipType source="http://www.imsglobal.org/vocabularies/iso2788_relations.xml">BT</relationshipType> </relationship> ... </vdex>
分层树
树状词汇的示例
<vdex xmlns="http://www.imsglobal.org/xsd/imsvdex_v1p0" orderSignificant="true"> <vocabIdentifier>beeeurope</vocabIdentifier> <vocabName> <langstring language="en">European Honey Bees</langstring> </vocabName> <term> <termIdentifier>nwe</termIdentifier> <caption> <langstring language="en">North-west of Europe</langstring> </caption> <term> <termIdentifier>nwe.1</termIdentifier> <caption> <langstring language="en">A. m. iberica</langstring> </caption> </term> <term> <termIdentifier>nwe.2</termIdentifier> <caption> <langstring language="en">A. m. intermissa</langstring> </caption> </term> <term> <termIdentifier>nwe.3</termIdentifier> <caption> <langstring language="en">A. m. lihzeni</langstring> </caption> </term> <term> <termIdentifier>nwe.4</termIdentifier> <caption> <langstring language="en">A. m. mellifera</langstring> </caption> </term> <term> <termIdentifier>nwe.5</termIdentifier> <caption> <langstring language="en">A. m. sahariensis</langstring> </caption> </term> </term> <term> <termIdentifier>swe</termIdentifier> <caption> <langstring language="en">South-west of Europe</langstring> </caption> <term> <termIdentifier>swe.1</termIdentifier> <caption> <langstring language="en">A. m. carnica</langstring> </caption> </term> <term> <term> <termIdentifier>swe.2</termIdentifier> <caption> <langstring language="en">A. m. cecropia</langstring> </caption> </term> <term> <termIdentifier>swe.3</termIdentifier> <caption> <langstring language="en">A. m. ligustica</langstring> </caption> </term> <term> <termIdentifier>swe.4</termIdentifier> <caption> <langstring language="en">A. m. macedonica</langstring> </caption> </term> <term> <termIdentifier>swe.5</termIdentifier> <caption> <langstring language="en">A. m. ruttneri</langstring> </caption> </term> <term> <termIdentifier>swe.6</termIdentifier> <caption> <langstring language="en">A. m. sicula</langstring> </caption> </term> </term> </vdex>
我在哪里可以投诉/寻求帮助/发送反馈?
- 首页 + 来源::
- 报告问题::
https://github.com/collective/collective.vdexvocabulary/issues
- 发送邮件::
联系 rok@garbas.si 获取更多信息
致谢
Rok Garbas,http://garbas.si,<rok@garbas.si>,作者
Seantis gmbh, http://www.seantis.ch 非常感谢您在 seantis.vdex 中的初始想法,从中我们获得了灵感,然后重新实现并扩展它。
Jens W Klein, http://kleinundpartner.at, <jens@bluedynamics.com>, 清理,Treevocabulary/ i18n-support
待办事项
通过 URL 获取词汇表(新指令)
加载词汇表视图入口点
存储词汇表(或 zodb 中的更改后的词汇表),可能还需要差异和合并选项
编写测试并获取良好的测试覆盖率
编写文档
使 ZCML 可选
通过 Web vdex 编辑器进行操作(这可能需要赞助)
向 TreeVocabulary 添加关系支持
变更日志
0.3 (2020-06-19)
支持 Python 3。[thet]
使用 black 和 isort 重新格式化代码库,以满足当前编码指南。[thet]
删除 bootstrap.py。现在通过 pip 安装 Buildout。[thet]
在注册词汇表时添加 default_language 选项。当站点语言在 vdex 文件中不可用时,使用默认语言。未指定此选项仍然意味着默认为 'en'。[tmog]
0.2.2 (2015-09-01)
较新的 lxml 不允许再访问 _root。这改为 getroot()。[pilz]
0.2.1 (2015-06-22)
Plone 4.3 兼容性 [ale-rt]
lxml 兼容性(imsvdex 优先选择 lxml 而不是 elementtree)[ale-rt]
z3c.autoinclude 的入口点 [ale-rt]
0.2 (2014-11-03)
为了添加新的词汇类型:TreeVocabulary,进行了一堆重构。如名称所示,treevocabulary 支持 zope.schema.interfaces.ITreeVocabulary。它使用自己的 i18n-domains 提供术语的标题和描述,从而具有更好的 i18n-support。[jensens]
0.1.2 (2014-01-07)
不要使用上下文来确定当前语言,而使用 getSite。上下文可能是一个适配器或其他没有 acquisition 的对象(例如,在 ignoreContext=True 的表单中)。[naro]
依赖于“setuptools”,而不是“distribute” [nutjob]
0.1.1 (2010-10-11)
在 README 中添加 历史、如何访问关系(从代码中) 和 示例 VDEX 文件 部分。[garbas]
将代码移至 http://github.com/collective/collective.vdexvocabulary。[garbas]
BUG(已修复):当加载 vdex 文件时,如果没有术语则失败。[garbas]
0.1 (2010-06-23)
添加文档并稍微清理代码。[garbas]
0.1a1 (2010-04-29)
初始发布。[garbas]
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源分发
集体.vdexvocabulary-0.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7d07c9456d6574b1687432bfe5eb85d4e14074abb98fb443c294e24179e87dfb |
|
MD5 | 051e1ac0d6684c4e114007da37bce401 |
|
BLAKE2b-256 | 86bdff32e41460117477603cdd05ec3efeb2ada6f4610e061b8ff8f37f135f1c |