使用空白节点将XML文件转换为RDF

时间:2015-01-16 17:01:08

标签: xml xslt rdf blank-nodes

我是使用XSLT的新手。

我正在编写从XML(元数据)文档到XML / RDF的XSL转换,我也在改进原始文档的基础模型。具体而言,原始文档描述了一个人,并且在某些时候它列出了所有人的姓名:

<?xml version="1.0" encoding="UTF-8"?>
<Person RecordID="abcd">
    <PersonNames>
        <PersonName>
            <Surname>Doe</Surname>
            <FirstName>John</FirstName>
        </PersonName>
        <PersonName>
            <Surname>Doe</Surname>
            <FirstName>Janine</FirstName>
        </PersonName>
        <PersonName>
            <Surname>Smith</Surname>
            <FirstName>Janine</FirstName>
        </PersonName>
    </PersonNames>
</Person>

我不想将此人的URI分别连接到这些项目,因为这样做不清楚'Joe Smith'从来就不是这个人的名字。我宁愿为每个名称使用一个空白节点,然后将FirstName和Surname链接到相应的空白节点;但是,我找不到生成空白节点ID的解决方案(我会在xsl:for-each循环中执行所有人的名字),然后我可以在循环外调用并参考。

直观地说,我会为每个元素创建一个id personNameID,然后,在循环外(和子树外),我会添加相应的三元组。结果将是:

<rdf:RDF 'namespaces'>
    <localontology:Person>
    ... person's metadata ...
    <foaf:name rdf:nodeID="name1">
    <foaf:name rdf:nodeID="name2">
    ....
</localontology:Person>
<rdf:Description rdf:nodeID="name1">
    <localontology:firstName 'FirstName in name1'>
    <localontology:surname 'Surname in name1'>
</rdf:Description>
<rdf:Description rdf:nodeID="name1">
    <localontology:firstName 'FirstName in name2'>
    <localontology:surname 'Surname in name2'>
</rdf:Description>

我真的不知道我可以使用哪些功能/构造......是否有人可以提供帮助?

1 个答案:

答案 0 :(得分:0)

我不会在这里使用空白节点。空白节点可以有一个uri,例如localontology:JohnDoe,然后具有firstName和surname作为属性。这样的uri是有意义的,当人们共享一个名字时,你可以重用同一个实例。如果你需要帮助产生这样的uri留下评论。

如果您坚持使用空白节点,可以使用number()和/或position()来获取当前节点并使用它来生成uri。 http://www.w3schools.com/xsl/el_number.asp