Jena嵌套属性

时间:2014-01-27 14:40:52

标签: rdf jena semantic-web

我怎样才能通过代码嵌套属性生成?像那样:

<geo:Departement rdf:about="DEP_05">
    <geo:code_departement>05</geo:code_departement>
    <geo:subdivision>
        <geo:Arrondissement rdf:about="ARR_051">
            <geo:code_arrondissement>051</geo:code_arrondissement>
            <geo:nom xml:lang="fr">Briançon</geo:nom>
        </geo:Arrondissement>
    </geo:subdivision>
    <geo:subdivision>
        <geo:Arrondissement rdf:about="ARR_052">
            <geo:code_arrondissement>052</geo:code_arrondissement>
            <geo:nom xml:lang="fr">Gap</geo:nom>
        </geo:Arrondissement>
    </geo:subdivision>
</geo:Departement>

我的所有属性(使用“createProperty”创建)都处于同一级别。

1 个答案:

答案 0 :(得分:3)

目前尚不清楚子属性的确切含义。重要的是要认识到RDF是一个基于图形的基于图形的数据表示,它基于标记的,有向的边,形式为三元组:

  

主题谓词对象

例如,您的数据包含三元组

DEP_05 rdf:type                 geo:Department
DEP_05 geo:code_department      "05"
DEP_05 subdivision              ARR_O51
ARR_051 rdf:type                geo:Arrondissement 
ARR_051 geo:code_arrondissement "051"

RDF / XML提供了许多不同的方法来编写相同的图形。例如,编写数据的一种方法(我添加了适当的前缀)是:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:geo="https://stackoverflow.com/q/21383685/1281433/">
  <geo:Departement rdf:about="https://stackoverflow.com/q/21383685/1281433/DEP_05">
    <geo:code_departement>05</geo:code_departement>
    <geo:subdivision>
      <geo:Arrondissement rdf:about="https://stackoverflow.com/q/21383685/1281433/ARR_051">
        <geo:code_arrondissement>051</geo:code_arrondissement>
        <geo:nom xml:lang="fr">Briançon</geo:nom>
      </geo:Arrondissement>
    </geo:subdivision>
    <geo:subdivision>
      <geo:Arrondissement rdf:about="https://stackoverflow.com/q/21383685/1281433/ARR_052">
        <geo:code_arrondissement>052</geo:code_arrondissement>
        <geo:nom xml:lang="fr">Gap</geo:nom>
      </geo:Arrondissement>
    </geo:subdivision>
  </geo:Departement>
</rdf:RDF>

另一种方式,即使用较少的RDF / XML允许的“快捷方式”,是:

<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:geo="https://stackoverflow.com/q/21383685/1281433/" > 
  <rdf:Description rdf:about="https://stackoverflow.com/q/21383685/1281433/ARR_052">
    <rdf:type rdf:resource="https://stackoverflow.com/q/21383685/1281433/Arrondissement"/>
    <geo:code_arrondissement>052</geo:code_arrondissement>
    <geo:nom xml:lang="fr">Gap</geo:nom>
  </rdf:Description>
  <rdf:Description rdf:about="https://stackoverflow.com/q/21383685/1281433/ARR_051">
    <rdf:type rdf:resource="https://stackoverflow.com/q/21383685/1281433/Arrondissement"/>
    <geo:code_arrondissement>051</geo:code_arrondissement>
    <geo:nom xml:lang="fr">Briançon</geo:nom>
  </rdf:Description>
  <rdf:Description rdf:about="https://stackoverflow.com/q/21383685/1281433/DEP_05">
    <rdf:type rdf:resource="https://stackoverflow.com/q/21383685/1281433/Departement"/>
    <geo:code_departement>05</geo:code_departement>
    <geo:subdivision rdf:resource="https://stackoverflow.com/q/21383685/1281433/ARR_051"/>
    <geo:subdivision rdf:resource="https://stackoverflow.com/q/21383685/1281433/ARR_052"/>
  </rdf:Description>
</rdf:RDF>

即使这些是不同的 XML 文档,它们也是同一RDF图的序列化。还有非XML序列化。在Turtle序列化中,您的数据是:

@prefix geo:   <https://stackoverflow.com/q/21383685/1281433/> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

geo:ARR_051  a                   geo:Arrondissement ;
        geo:code_arrondissement  "051" ;
        geo:nom                  "Briançon"@fr .

geo:DEP_05  a                 geo:Departement ;
        geo:code_departement  "05" ;
        geo:subdivision       geo:ARR_051 , geo:ARR_052 .

geo:ARR_052  a                   geo:Arrondissement ;
        geo:code_arrondissement  "052" ;
        geo:nom                  "Gap"@fr .

认识到这些都是相同的图非常重要。 RDF处理工具不关心您使用的是哪一个。也就是说,使用更易读的格式会更好,所以我倾向于喜欢Turtle。如果您仍然需要使用RDF / XML,那么您可以使用“RDF / XML-ABBREV”语言序列化模型。为此,请将"RDF/XML-ABBREV"指定为Model.write(OutputStream out, String lang)lang参数。来自Javadoc:

  

write

Model write(OutputStream out, String lang)
     

以指定语言编写此模型的序列化表示。

     

编写模型的语言由lang指定   论点。预定义值为“RDF / XML”,“RDF / XML-ABBREV”,   “N-TRIPLE”,“TURTLE”,(和“TTL”)和“N3”。默认值,   由null表示,是“RDF / XML”。

     

<强>参数:

     
      
  • out - 写入RDF的输出流
  •   
  • lang - 输出语言
  •   
     

<强>返回:

     
      
  • 此型号
  •   

相关问题

以前出现过一些相关的问题,你可能会发现其中一些有用。我很快找到的是: