我是使用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>
我真的不知道我可以使用哪些功能/构造......是否有人可以提供帮助?
答案 0 :(得分:0)
我不会在这里使用空白节点。空白节点可以有一个uri,例如localontology:JohnDoe,然后具有firstName和surname作为属性。这样的uri是有意义的,当人们共享一个名字时,你可以重用同一个实例。如果你需要帮助产生这样的uri留下评论。
如果您坚持使用空白节点,可以使用number()和/或position()来获取当前节点并使用它来生成uri。 http://www.w3schools.com/xsl/el_number.asp