1

我对使用 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 分别连接到这些项目中的每一个,因为这样做不清楚“乔·史密斯”从来不是这个人的名字。我宁愿为每个名字使用一个空白节点,然后将 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>

我真的不知道我可以使用哪些函数/结构......有人可以帮忙吗?

4

1 回答 1

0

我不会在这里使用空白节点。空白节点可以具有诸如 localontology:JohnDoe 之类的 uri,然后具有 firstName 和 surname 作为属性。这样的 uri 是有意义的,当人们共享一个名称时,您可以重用相同的实例。如果您需要帮助生成这样的 uri,请发表评论。

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

于 2015-01-19T18:35:26.950 回答