2014-08-29 80 views
0

我有这个资料片的RDF/XML如何检索一个RDF属性

<rdf:RDF xmlns:cim="http://iec.ch/TC57/2012/CIM-schema-cim16#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
<cim:SynchronousMachineTimeConstantReactance rdf:ID="_54302da0-b02c-11e3-af35-080027008896"> 
    <cim:IdentifiedObject.aliasName>GENCLS_DYN</cim:IdentifiedObject.aliasName> 
    <cim:IdentifiedObject.name>RoundRotor Dynamics</cim:IdentifiedObject.name> 
    <cim:SynchronousMachineTimeConstantReactance.tpdo>0.30000001192092896</cim:SynchronousMachineTimeConstantReactance.tpdo> 
    <cim:SynchronousMachineTimeConstantReactance.tppdo>0.15000000596046448</cim:SynchronousMachineTimeConstantReactance.tppdo> 

我已经学会了如何读取文档,但现在我想走得更远一点。我使用API​​函数“玩”,尝试获取值,但我迷失了方向(我认为我不太了解JENA和RDF的工作原理)。那么,我怎样才能得到每个标签的值?

问候!

回答

1

我将从Reading and Writing RDF in Apache Jena文档开始,然后阅读The Core RDF Api。理解RDF Data Model的一个重要步骤是将XML与您对RDF的理解分离开来。 RDF是一种图形数据模型,它恰好具有一种XML格式的序列化。

您会注意到,除非您在讨论如何序列化/反序列化RDF/XML,否则在讨论中实际上根本没有显示xml特定语言(如“tags”)。

为了使您所看到的数据更加人性化,我建议将其写入TURTLE。 TURTLE(或TTL)是RDF的另一个序列化,它更容易读取或写入。

以下代码将在TURTLE中表达您的数据,并有助于理解您所看到的内容。

final InputStream yourInputFile = ...; 
final Model model = ModelFactory.createDefaultModel(); 
model.read(yourInputFile, "RDF/XML"); 
model.write(System.out, null, "TURTLE"); 

您还需要在提交有关该主题区域的问题时提供最少的工作示例。例如,我有一些缺少结束标签添加到您的数据,以便为它是有效的XML:

<rdf:RDF xmlns:cim="http://iec.ch/TC57/2012/CIM-schema-cim16#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
    <cim:SynchronousMachineTimeConstantReactance rdf:ID="_54302da0-b02c-11e3-af35-080027008896"> 
     <cim:IdentifiedObject.aliasName>GENCLS_DYN</cim:IdentifiedObject.aliasName> 
     <cim:IdentifiedObject.name>RoundRotor Dynamics</cim:IdentifiedObject.name> 
     <cim:SynchronousMachineTimeConstantReactance.tpdo>0.30000001192092896</cim:SynchronousMachineTimeConstantReactance.tpdo> 
     <cim:SynchronousMachineTimeConstantReactance.tppdo>0.15000000596046448</cim:SynchronousMachineTimeConstantReactance.tppdo> 
    </cim:SynchronousMachineTimeConstantReactance> 
</rdf:RDF> 

在成为以下甲鱼

<file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896> 
     a        cim:SynchronousMachineTimeConstantReactance ; 
     cim:IdentifiedObject.aliasName "GENCLS_DYN" ; 
     cim:IdentifiedObject.name  "RoundRotor Dynamics" ; 
     cim:SynchronousMachineTimeConstantReactance.tpdo "0.30000001192092896" ; 
     cim:SynchronousMachineTimeConstantReactance.tppdo "0.15000000596046448" . 

RDF在语句级别工作,所以要找出你的_54302da0-b02c-11e3-af35-080027008896acim:SynchronousMachineTimeConstantReactance你会寻找相应的三元组。耶拿的Model API(与上面链接)将为您提供识别properties that resources have的方法。

下面将列出其主题是上述资源的所有语句:

final Resource s = model.getResource("file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896"); 
final ExtendedIterator<Statement> properties = s.listProperties(); 
while(properties.hasNext()) { 
    System.out.println(properties.next()); 
} 

主要生产:

[file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896, http://iec.ch/TC57/2012/CIM-schema-cim16#SynchronousMachineTimeConstantReactance.tppdo, "0.15000000596046448"] 
[file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896, http://iec.ch/TC57/2012/CIM-schema-cim16#SynchronousMachineTimeConstantReactance.tpdo, "0.30000001192092896"] 
[file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896, http://iec.ch/TC57/2012/CIM-schema-cim16#IdentifiedObject.name, "RoundRotor Dynamics"] 
[file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896, http://iec.ch/TC57/2012/CIM-schema-cim16#IdentifiedObject.aliasName, "GENCLS_DYN"] 
[file:///R:/workspaces/create/git-svn/create-sparql/RDF/XML#_54302da0-b02c-11e3-af35-080027008896, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://iec.ch/TC57/2012/CIM-schema-cim16#SynchronousMachineTimeConstantReactance] 

主要生产:

+0

感谢您的答复抢,对不起没有提供一个完整的例子。这是包含CIM中完整SMIB定义的更大文件的一部分。 – 2014-09-01 14:41:46

+0

并感谢@RobHall的解释。我给了我一个很好的起点。 – 2014-09-02 14:38:52

+0

别担心。学习如何最好地参与社区需要一点时间:) – 2014-09-02 15:11:42