用于将django模型的元素映射到外部rdf存储的可插入应用程序

django-rdf-io的Python项目详细描述


#rdf io

用于将django链接到rdf存储和推理器的实用程序。


原因:允许使用语义数据模型和规则生成内容的丰富视图,并公开标准化的访问和查询接口,如sparql和链接的数据平台。相反,允许使用django来管理rdf存储中的内容:—)


*可链接的推断支持和持久性处理
*可扩展以支持特定的信息模型-例如skos
*任意django对象的可配置元数据属性。
rdf_io具有初始数据,可加载常用的w3c名称空间和前缀(owl、rdf、dc在)

o/",include('rdf_io.urls')`to urls.py
*可以选择为rdfserver和rdfserver_api定义设置
*运行manage.py makemigrations
*运行manage.py migrate

自动发布更新到rdf
这实际上只保证推送添加和更新-删除虽然更新将倾向于替换语句,但不会处理。启动时启用(django重新加载后必需)时,

任何一个模型。

`{server戋url}/rdf戋io/ctl戋u signals/sync`

为所有模型类庆兴
`{server-url}/rdf-io/ctl-i/ctl-signals/(on/off)`


35 35 35 35







//导入和将django对象序列化为rdf而不使用任何rdf存储,不同的rdf存储可用于不同的对象
1)配置变量以用于设置到rdf存储的servicebindings和推断引擎
2)为目标存储设置servicebindings(通过管理接口或迁移)
3)预加载推理器(例如shacl)所需的任何静态数据和规则-或设置迁移以使用绑定到适当servicebindings的importedresource加载这些数据和规则

$server/admin/rdf-io
2)创建在线资源使用
{server-url}/rdf-io/to{model{model}/id/{model{model{id}`
{server{server{url}/rdf-io/to{model{model{model{model{model{server{server}/rdf-io/to{model{model{model{model{server{server{url}/rdf-io/to{model{model{model{model{model{)配置一个或多个servicebindings并附加到relevant objectmapping(如果要将对该对象的更新发布到rdf store-否则servicebindings可以直接绑定到单个导入的资源对象)
注意:类型验证的服务绑定将导致执行检查,失败时将中止服务链,并且invoke on_fail bindings(尚未实现)
注意:inferencing类型的服务绑定将扩展要存储的数据,但不会保存它。应该将其链接到持久绑定。
2)将特定对象发布到配置的rdf存储:
`{server-url}/rdf-io/pub-rdf/{model-name}/{model-id}
(请注意,如果定义了对象映射,这将在对象保存时自动发生)
3)到重新发布一组django模型的所有对象:
`{server_url}/rdf_io/sync_remote/{model_name}[,{model_name}]*`




注意:对于/rdf io/to_rdf/{model_name}/key/{model_natural_key}若要工作,目标模型必须定义一个带有get_byu natural_key方法的manage,该方法采用unique single term(如uri)注意,这将允许使用curies(如myns:myterm),其中前缀注册为rdf_io空间中的命名空间。如果检测到curie,rdf_io将首先尝试作为字符串进行匹配,然后展开到完整的uri并进行匹配。



这一切都可以在自定义逻辑中完成,但rdf_io允许使用shacl等标准来捕获这一点,并避免硬编码和隐藏所有这些规则。

es post save)

1)设置RDF推理器-注意这可能是在默认存储上启用推理或设置新存储的问题。如果规则不能安全地共存,则可以配置多个推理存储。
2)将推理规则加载到推理器(可以选择使用importedresource对象并持久化替换服务绑定)
3)创建用于推理的服务绑定-这些绑定可以使用下一个服务器链接vice
4)确保清除推断存储区中的临时数据-使用适当的持久性删除servicebinding作为链中的最后一步

注意:如果设置了单独的推断存储区,推断规则可能需要更复杂,但某些数据需要或者推断位于主目标存储库中。使用spin,这会导致如下构造:

'
where{
?主回购服务:回购。a a skos:概念。
可选{?更广泛?B。}
可选{?B斯科斯:窄一点?a}
可选{服务?主回购
{
可选{?更广泛?B。}
可选{?B斯科斯:窄一点?A}

}
}


哪里?mainrepo是一个加载到推理器的对象,用于定义目标数据存储,允许这样的规则可重用。

'


\r/>每个映射包括:
1)生成对象的uri的标识符映射
2)将值列表映射到rdf谓词的attributeMapping元素集
3)将值列表映射到复杂对象属性的embeddedMapping元素集(可选地包装在空白节点中)
4)对于django模型,可能存在一个过滤器来限制映射应用于的对象集。RDF图是所有配置的对象映射输出的并集。
(注意,ServiceBinding可以绑定到特定的映射,但默认行为是用于查找Gioven Django ModelType的所有ServiceBinding,它们都得到复合图(这可能是更改为以后支持将不同的图发布到不同的rdf存储。)


\literal)

源模型元素可以使用类似xpath的语法定义,嵌套使用django过滤器样式、a(点)或/符号,其中路径的每个元素都可以支持可选过滤器。
```
path=(literal element([./]element)*)


literal="a quoted string""a quoted string"<;a uri>;

element=(property related_model_expr)(filter])?

property=django模型属性的有效名称

related_model_expr=模型_名称(\({property}\)?



筛选器=(字段(!)?=文字)((,和)字段(!)?=literal)*literal((,或)literal)*
````

注意:
*在数据库中使用django筛选器计算相关模型上的筛选器,在序列化期间执行属性值上的筛选器。

*none或null的literal值被视为none或empty strin根据django实践,gs.

*属性上的筛选器是可能匹配的简单列表(,与"or"相同),并应用于路径
person的元素。title['mrs','miss','ms']将匹配值为"mrs","miss","ms"的任何标题

*相关对象上的筛选器是property=值语法。属性使用django stlye路径-即notation.namespace.prefix=skos

*如果通过中介使用多个字段,则使用相关的"模型"表达式-如果这是自关系,则指定属性:例如
semrelation(origin_concept)[rel_type="1'。target_concept

应用程序发布在post-save
*syc_remote方法上,用于推送模型类型列表中的所有对象(推送是等幂的-可安全重复)
*在属性marmotta中具有每级筛选选项的复杂属性链
*在django 1.6下的geonode项目上下文中测试对照django 1.8.6和1.11

todo:
*为对象映射实现全局过滤器(将映射限制到子集)
*设置从远程存储中删除对象的信号和方法

df
从django.contrib.contenttypes.models导入content type
从rdf_io.models导入objectmapping

ct=contenttype.objects.get(model=model)
obj_mapping_list=objectmapping.objects.filter(content_type=ct)
build_rdf(gr,obj,obj_mapping_list)返回一个rdflib.graph()
gr.serialize(format="turtle")
````
``使用django视图进行序列化:


`{server_url}/rdf_io/to_rdf{model{model{model{model{id}`







>
>
``不推荐使用的
<
<
/>
/>
/><
/>/><
/>/><
/>
/>/>/><
/>motta.war并按照marmotta指令配置
*定义资源容器不同型号的模式

,例如

````
/{model}/{slug}",
/ldp/voc/{scheme-slug}/{term},
}
}
````

*在上面的示例中创建模式所需的容器(例如/ldp/voc)*
*为目标模型部署推理规则(以生成可以从已发布数据推断出的附加语句-这是在电源输入)
-参见http://eagle-dev.salzburgsresearch.at/reasoner/admin/about.html
例如
```
curl-i-h"内容类型:text/plain"-x post--data binary@fixtures/skos.kwrl http://localhost:8080/marmotta/reasoner/program/skos.kwrl
curl-i-x get http://localhost:8080/marmotta/reasoner/program/skos.kwrl
curl-i-x get
curl-i-h"内容类型:文本/普通"-x post--data binary@skos.skwrl http://localhost:8080/marmotta/reasoner/program/skos.skwrl
````
是TIGG在为对象类型定义了对象映射之后,在保存对象时自动执行。

e/rdf_io/sync_remote/scheme,concept





*引入序列化程序时,如果希望能够序列化应用程序中没有默认映射的类,则应该可以定义这些类(在顶部项目中创建rdf_mappings.py文件)
*顶部项目将允许应用程序的默认映射。o被重写,无论是作为一个整体还是基于每个映射(即更改或添加单个属性的映射)
*序列化器将作为转储数据的独立序列化器可用(并扩展为loaddata的反序列化器),但也可以连接以发布序列化将数据绑定到外部服务-因此我的serialiser应用程序可能有一个模型来捕获此类服务的连接参数-而其他应用程序设置将能够在此模型中定义连接,并将不同模型的rdf映射绑定到不同的目标服务。

然后应用程序:
1主项目
1 RDF序列化程序实用程序
1导入的应用程序具有默认的RDF序列化
1导入的应用程序可能具有或不具有在项目设置中定义的RDF序列化。

只有更多的重量级RDF方法尝试对RDF进行完全建模并实现SPARQL—我只想把一些东西吐到外部三重存储中。

rdf_io对象是使用自然键定义的,允许以任何顺序加载模块的默认映射。使用设置可能更优雅,这样可以更容易地自定义这些默认值。

为模型定义对象映射时,会注册信号。

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

推荐PyPI第三方库


热门话题
java Spark sample()函数是否复制数据?   java如何在API中返回单例列表?   java我可以生成提供输入/输出的哈希函数吗?   如何“使用MATLAB或JAVA”从文本文件中读取数字并将其保存在数组中?   java如何将十进制转换为十六进制?   JavaPostXML文件   java XStream如何在XML中不存在带注释的字段时引发异常   java Tomcat启动批处理问题   java AccessControlException与同一代码库中的小程序类   java如何将长本地时间戳转换为字符串UTC时间戳   java在同一个JavaVM中有多个沙盒   改进LDAP的Java代码   拖放后未附加到DOM的java元素   java通过socket发送压缩数据