使用 dotnetrdf 在下面生成的最佳方法是什么?假设我已经定义了所有命名空间,我正在尝试输出以下内容:
<owl:Class rdf:about = "http://my.taxonomies.com/myModel/Lion" >
<rdfs:label xml:lang = "en"> Lion </ rdfs:label>
<rdfs:subClassOf> <owl:Class rdf:about = "http://my.taxonomies.com/myModel/Animals" />
<rdfs:subClassOf>
</owl:Class>
我经历的教程没有猫头鹰类示例。
谢谢
在 dotNetRDF 中创建 OWL 本体时有两种选择。你可以创建一个图并使用 Assert 方法在本体图中断言你想要的三元组(如果你愿意,这是低级 API);或者你可以使用VDS.RDF.Ontology
命名空间中的辅助类和方法,它们抽象出制作本体图时需要采取的一些步骤。
这是使用低级 API 创建图形的示例:
var g = new Graph();
// Add namespaces (RDF and RDFS are already declared)
g.NamespaceMap.AddNamespace("owl", UriFactory.Create("http://www.w3.org/2002/07/owl#"));
// Create nodes (this could be done inline in the Assert code if you prefer
var lion = g.CreateUriNode(UriFactory.Create("http://my.taxonomies.com/myModel/Lion"));
var animals = g.CreateUriNode(UriFactory.Create("http://my.taxonomies.com/myModel/Animals"));
var a = g.CreateUriNode("rdf:type");
var owlClass = g.CreateUriNode("owl:Class");
var rdfsLabel = g.CreateUriNode("rdfs:label");
var rdfsSubclassOf = g.CreateUriNode("rdfs:subclassOf");
// Assert triples
g.Assert(lion, a, owlClass);
g.Assert(lion, rdfsLabel, g.CreateLiteralNode("Lion", "en"));
g.Assert(lion, rdfsSubclassOf, animals);
当这个图被序列化为 RDF/XML 时,你得到的输出是:
<?xml version="1.0" encoding="utf-16"?>
<rdf:RDF xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Class rdf:about="http://my.taxonomies.com/myModel/Lion">
<rdfs:label xml:lang="en">Lion</rdfs:label>
<rdfs:subclassOf rdf:resource="http://my.taxonomies.com/myModel/Animals" />
</owl:Class>
</rdf:RDF>
这段代码使用本体助手创建了相同的图:
var o = new OntologyGraph();
var lion = o.CreateOntologyClass(UriFactory.Create("http://my.taxonomies.com/myModel/Lion"));
lion.AddType(UriFactory.Create(OntologyHelper.OwlClass));
lion.AddLabel("Lion", "en");
var animals = o.CreateOntologyClass(UriFactory.Create("http://my.taxonomies.com/myModel/Animals"));
lion.AddSuperClass(animals);
为该图生成的 RDF/XML 与之前相同:
<?xml version="1.0" encoding="utf-16"?>
<rdf:RDF xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Class rdf:about="http://my.taxonomies.com/myModel/Lion">
<rdfs:label xml:lang="en">Lion</rdfs:label>
<rdfs:subClassOf rdf:resource="http://my.taxonomies.com/myModel/Animals" />
</owl:Class>
</rdf:RDF>
该OntologyGraph
级实际上是扩展了Graph
,所以你可以混合和匹配这些模式,即使用低级别或在其上的更高级别的API。
这确实对 Kal 很有帮助。您希望通过您建议的序列获得什么输出?当我按照您的建议将 rdfs 与 owl 混合/匹配时,输出将 rdfs:label 转换为 owl:label 并将 rdfs:subClassOf 转换为 owl:subClassOf。这是预期的吗?谢谢
嗨@RayW63,我错过了 OntologyGraph 示例中将 Lion 资源类型设置为 owl:Class 的一步。我已经用那段代码更新了答案,以及在一个简单的命令行应用程序中运行这段代码时得到的输出。正如您将看到的,资源和属性位于正确的命名空间中。从您所说的情况来看,您的图中可能有一个不正确的命名空间映射 - 值得检查您是否将 owl 命名空间设置为正确的 URI。