如何使用LINQ解析OWL文件(包含RDF名称空间)

|| 我设法使用LINQ解析了一个简单的XML文件并将其写入列表框,但是当我尝试从OWL文件获取值时,查询没有得到任何结果,因此\“ variables \”是空的。这是我尝试执行的操作之一:
 XDocument owlXML = XDocument.Load(Server.MapPath(\"App_Data\\\\filename.owl\"));

    var variables = from variable in owlXML.Descendants(\"names\")
                   where variable.Attribute(\"rdf:ID\") != null
                   select new 
                   { 
                      type = tog.Attribute(\"rdf:ID\").Value
                   };

   ListBox1.DataSource = clothes;
   ListBox1.DataBind();
猫头鹰文件
<rdf:RDF
 xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
 ...
 ...
 xml:base=\"http://www.owl-ontologies.com/Ontology1299428518.owl\">
 <owl:Ontology rdf:about=\"\"/>
 <owl:Class rdf:ID=\"animal\"/>
 <owl:Class rdf:ID=\"natural_disaster\">
   <rdfs:subClassOf>
     <owl:Class rdf:ID=\"disaster\"/>
   </rdfs:subClassOf>
   <rdfs:subClassOf>
     <owl:Class rdf:ID=\"natural_phenomenon\"/>
   </rdfs:subClassOf>
 </owl:Class>

 <names rdf:ID=\"New York\"/>
 <names rdf:ID=\"Washington\"/>
 <names rdf:ID=\"Sofia\"/>
 <names rdf:ID=\"Miami\"/>
</rdf:RDF>
    
已邀请:
        您必须使用适当的名称空间,“ 2”不是属性名称的一部分,它是包含在其中的名称空间-您必须声明并使用该名称空间-对于Linq to XML,这意味着要使用“ 3”-这有效:
XDocument owlXML = XDocument.Load(\"test.xml\");
XNamespace rdf = \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\";

var variables = from variable in owlXML.Descendants(\"names\")
                where variable.Attribute(rdf +\"ID\") != null
                select new
                {
                    type = variable.Attribute(rdf + \"ID\").Value
                };
确保代码中名称空间的值与XML中声明的名称完全匹配。 另外,由于您只对一个值感兴趣,因此不必在这里使用匿名类型,因此可以通过直接返回字符串(
types
然后是
IEnumerable<string>
)来简化操作:
var types = from variable in owlXML.Descendants(\"names\")
            where variable.Attribute(rdf +\"ID\") != null
            select variable.Attribute(rdf + \"ID\").Value
    

要回复问题请先登录注册