6

如何解析 Notation3 文件表示的三元组并将其加载到数据库中?我对JenaSesame有点熟悉,但它们似乎适合处理 RDF 或 Turtle,而不是完整的 Notation3。

我发现用于处理 N3 的强大工具相对较少。这里列出了我找到的几个,并且只包含粗略的 Python 脚本,这些脚本只能执行基本的命令行操作,并且似乎没有标准的打包、分发或维护。默认的 Python 库似乎是,notation3.py但我找不到它的单个主页,并且在 Internet 上发现了几十个不同的版本。

例如,假设我有以下 N3 代表植物分类:

{
   []
       :genus "Abies" ;
       :species "alba" ;
       :name [:value "Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "European Silver Fir" ; :usage "common" ; :language "English" ] ;
       :name [:value "abeto blanco" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "abeto plateado" ; :usage "common" ; :language "Spanish" ] ;
       :name [:value "Edeltanne" ; :usage "common" ; :language "German" ] ;
       :name [:value "Silbertanne" ; :usage "common" ; :language "German" ] ;
       :name [:value "Weißtanne" ; :usage "common" ; :language "German" ] ;
       :stem!:type :erect ;
       :stem!:height [ :value!:start 30.0 ; :value!:end 50.0 ; :value!:units "m" ] ;
       :bark!:color :grey ;
       :bark!:ridges :irregular ;
       :foliage!:seasonality :evergreen ;
       :foliage!:type :needle ;
       :foliage!:arrangement :alternate ;
       :foliage!:length [ :value!:start 1.0 ; :value!:end 3.0 ; :value!:units "cm" ] ;
       :foliage!:width [ :value!:start 0.2 ; :value!:end 0.3 ; :value!:units "cm" ] ;
       :foliage!:color :green ;
       :foliage!:spiney :FALSE ;
       :flower [ :gender :male ; :inflorescence :catkin ; :sense :straight ; :color :brown ] ;
       :flower [ :gender :male ; :inflorescence :catkin ; :sense :straight ; :color :yellow ] ;
       :flower [ :gender :female ; :inflorescence :catkin ; :sense :straight ; :color :pink ] ;
       :fruit [ :kind :cone ; :color :brown ; ] ;
}
:is-a :botanical-classification ;
:source [
   :uri <http://originating/site> ;
   :name "John Doe" ;
   :data-collection-date "2005-01-01" ;
] ;
:transcribed-by "Al Nonymous" ;
:transcription-date "2010-09-01" .

我希望能够将此(可能还有数千条类似的记录)加载到数据库中,这样我就可以运行任意查询,例如“谁在 2010 年转录了包含常见西班牙名字的记录?” 或“与 X 属相关的平均花色是多少?”

这与当前的语义网络工具和 N3 目前是否实用?

4

1 回答 1

3

基本问题是 N3 始终是一种实验性符号——完整的语言从未被广泛实施。本文档中的图表信息量很大:您的示例使用了图形文字,这些文字位于任何广泛实施的 N3 子集之外。现在命名图得到了更广泛的使用,可以在包括 Jena 在内的大多数 RDF 系统中表达相同的信息,但不能直接解析输入文件。

如果是我,我会考虑编写一个前端转换阶段,可能使用擅长字符串和模板的语言——比如 Ruby。然后,您可以将输入文件转换为标准 RDF 处理器可以处理的格式。例如,表示“Al Nonymous”所做陈述的图形文字可以转换为表示 Al 断言该分类的动作的 bNode。或者,您可以从其文字中提取每个图并将其保存到具有合成图名称的文件中,从而保留您当前拥有的嵌套图结构。类似地,property!path符号可以很容易地重写为标准 RDF,但代价是稍微冗长一些。

或者,请您的数据提供者以更易于处理的形式为您提供输出!

于 2011-03-09T13:33:10.453 回答