跳转到主要内容

作为Zope词汇表的IMS VDEX词汇表

项目描述

这个包做什么?

IMS VDEX 是一个词汇表交换标准。 collective.vdexvocabulary 在 vdex 词汇表和 zope 词汇表 (zope.schema.vocabularies) 之间架起桥梁,因此您可以轻松地在 Plone/Zope、Pyramid 或任何其他支持 Zope-Toolkit 的系统中使用它。

它有什么特别之处?

collective.vdexvocabulary 包含两种不同类型的词汇表

  1. 如果你有包含大量关系的词汇表,比如有 +10,000 个术语和 +30,000 个关系的词汇表,那么使用 collective.vdexvocabularyVdexVocabulary 类型将是一个完美的用例。

  2. 如果你有类似树状结构的词汇表,这也非常适用。 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

报告问题::

https://github.com/collective/collective.vdexvocabulary/issues

发送邮件::

联系 rok@garbas.si 获取更多信息

致谢

待办事项

  • 通过 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]

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。

源分发

collective.vdexvocabulary-0.3.tar.gz (18.6 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面