You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用dotnetRDF向RDF图添加复杂对象(含RDF/XML示例)

使用dotnetRDF生成嵌套结构的RDF/XML

要生成你需要的嵌套RDF/XML结构,核心是用**空白节点(Blank Node)**来表示匿名的dct:PeriodOfTime资源,再为这个空白节点关联对应的类型和属性。下面是具体实现步骤和代码:

实现思路

  1. 声明dct、schema、rdf等必要命名空间
  2. 创建空白节点作为dct:PeriodOfTime的实例载体
  3. 为空白节点添加类型声明(绑定rdf:type到dct:PeriodOfTime)
  4. 给空白节点添加带dateTime数据类型的schema:startDate和schema:endDate属性
  5. 将目标主资源与空白节点通过dct:temporal属性关联
  6. 用RdfXmlWriter输出最终的RDF/XML结构

完整代码示例

using VDS.RDF;
using VDS.RDF.Writing;

// 定义命名空间URI
var dctNs = new Uri("http://purl.org/dc/terms/");
var schemaNs = new Uri("https://schema.org/");
var rdfNs = new Uri("http://www.w3.org/1999/02/22-rdf-syntax-ns#");

// 初始化RDF图并绑定命名空间前缀
var graph = new Graph();
graph.NamespaceMap.AddNamespace("dct", dctNs);
graph.NamespaceMap.AddNamespace("schema", schemaNs);
graph.NamespaceMap.AddNamespace("rdf", rdfNs);

// 创建主资源节点(替换为你实际的资源URI)
var mainResource = graph.CreateUriNode(new Uri("http://example.org/your-resource"));

// 创建空白节点用于承载PeriodOfTime
var periodNode = graph.CreateBlankNode();

// 1. 标记空白节点的类型为dct:PeriodOfTime
graph.Assert(new Triple(periodNode, graph.CreateUriNode(rdfNs + "type"), graph.CreateUriNode(dctNs + "PeriodOfTime")));

// 2. 添加带dateTime数据类型的起止日期
var startDateLit = graph.CreateLiteralNode("2019-06-06T00:00:00", UriFactory.Create(XmlSpecsHelper.XmlSchemaDataTypeDateTime));
graph.Assert(new Triple(periodNode, graph.CreateUriNode(schemaNs + "startDate"), startDateLit));

var endDateLit = graph.CreateLiteralNode("2019-09-28T00:00:00", UriFactory.Create(XmlSpecsHelper.XmlSchemaDataTypeDateTime));
graph.Assert(new Triple(periodNode, graph.CreateUriNode(schemaNs + "endDate"), endDateLit));

// 3. 关联主资源与PeriodOfTime节点
graph.Assert(new Triple(mainResource, graph.CreateUriNode(dctNs + "temporal"), periodNode));

// 输出RDF/XML到控制台(可替换为文件流)
var writer = new RdfXmlWriter();
writer.Save(graph, Console.Out);

输出结果说明

运行代码后会生成符合需求的RDF/XML,其中<dct:temporal>内部的结构完全匹配你的预期:

<rdf:RDF xmlns:dct="http://purl.org/dc/terms/" xmlns:schema="https://schema.org/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="http://example.org/your-resource">
    <dct:temporal>
      <dct:PeriodOfTime>
        <schema:startDate rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2019-06-06T00:00:00</schema:startDate>
        <schema:endDate rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2019-09-28T00:00:00</schema:endDate>
      </dct:PeriodOfTime>
    </dct:temporal>
  </rdf:Description>
</rdf:RDF>

外层的<rdf:Description>是RDF/XML的标准包裹结构,若只需要<dct:temporal>片段,直接提取对应部分即可。

内容的提问来源于stack exchange,提问作者chrschtt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:07:36