rdflib的有序turtle序列化程序
otsrdflib的Python项目详细描述
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
属性,允许为每个类定义分类器。