rdflib的有序turtle序列化程序

otsrdflib的Python项目详细描述


Build statusCode healthLatest versionMIT license

RDFLIB的有序Turtle序列化程序

rdflibTurtle序列化程序的扩展 这增加了秩序(以速度为代价)。 当您需要在Turtle文件之间生成差异时非常有用,或者只是为了使其 人类更容易检查档案。

$ pip install otsrdflib

用法:

fromrdflibimportgraphfromotsrdflibimportOrderedTurtleSerializermy_graph=Graph()out=open('out.ttl','wb')serializer=OrderedTurtleSerializer(my_graph)serializer.serialize(out)

班级秩序

默认情况下,类按其uri的字母顺序排列。

可以通过向class_order属性添加类来强制自定义顺序。 例如,对于skos词汇表,您可能希望首先对概念方案进行排序, 然后是词汇表的其他元素:

serializer.class_order=[SKOS.ConceptScheme,SKOS.Concept,ISOTHES.ThesaurusArray,]

未包含在class_order列表中的任何类都将按字母顺序排序 最后,在课程列表中包含的课程之后。

实例顺序

默认情况下,类的实例按其uri的字母顺序排列。

可以通过定义生成排序键的函数来强制自定义顺序 来自uri。例如,可以定义一个函数,该函数返回 要数字排序的uri的最后一部分:

serializer.sorters=[('.*?/[^0-9]*([0-9.]+)$',lambdax:float(x[0])),]

元组('.*?/[^0-9]*([0-9.]+)$')的第一个元素是regexp模式 与uri匹配,而第二个元素(lambda x: float(x[0])) 是排序键生成函数。在本例中,它返回第一个 作为浮点数的回溯引用。

将尝试根据实例匹配sorters中的模式 任何级别的。您还可以定义只与 特定类的实例。假设您只想对实例进行排序 这样:

fromrdflib.namespaceimportSKOSserializer.sorters_by_class={SKOS.Concept:[('.*?/[^0-9]*([0-9.]+)$',lambdax:float(x[0])),]}

举个稍微复杂一点的例子,让我们看看杜威。班级 在主计划中,用uri来描述 http://dewey.info/class/001.433/e23/,我们将使用类号 (001.433)用于分类。但也有表类 就像http://dewey.info/class/1--0901/e23/。 我们想在最后,在主要日程之后对这些进行排序。 为了实现这一点,我们定义了两个分类器,一个与表类匹配 与主要日程课程相匹配的课程:

serializer.sorters=[('/([0-9A-Z\-]+)\-\-([0-9.\-;:]+)/e',lambdax:'T{}--{}'.format(x[0],x[1])),# table numbers('/([0-9.\-;:]+)/e',lambdax:'A'+x[0]),# main schedule numbers]

用“A”和“A”预先排列表号, 我们确保表编号在主计划编号之后排序。

版本0.5的变化

  • topClasses属性被重命名为class_order,以便更好地反映 其内容和符合PEP8。默认情况下也改为空, 因为之前的默认列表是相当随机的。
  • 添加了一个sorters_by_class属性,允许为每个类定义分类器。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如果SQL server执行计划是流式传输数据,那么调用next()时Java ResultSet对象将如何反应?   java为什么水平滚动条永远不会出现在JTable上?   java如何在Android项目中添加SDK模块   绿脚:爪哇。lang.ClassCastException:无法将障碍物投射到球投射物   xslt需要在Java1.4.2中使用SaxonB(版本9.1.0.8)方面的帮助   java Apache HTTP客户端下载SOAP响应的一部分   为Java 9计划的“过滤传入序列化数据”解决了数据反序列化安全漏洞吗?   java如何使用drools对列表中的元素进行分组   java从匿名类到lambda表达式   Java中是否有不可变的单链表实现?   java动态添加按钮以滚动查看安卓   java GAE:无法为模块http请求设置管理员登录凭据   java如何在Hibernate 5 CriteriaBuilder中使用条件条件获取计数   java如何将JSON+HAL响应解析为POJO   java如何获取计算器程序,对两个以上的数字进行加、减、乘、除   java Thymeleaf+静态资源+@ResponseBody