Python rdflib未解析RDF/XML文件
我正在尝试使用rdflib加载和解析xml格式的非常简单的rdf文件。 我不认为,这是正确的解析。这是我的rdf/xml文件Python rdflib未解析RDF/XML文件,python,rdf,semantic-web,rdflib,foaf,Python,Rdf,Semantic Web,Rdflib,Foaf,我正在尝试使用rdflib加载和解析xml格式的非常简单的rdf文件。 我不认为,这是正确的解析。这是我的rdf/xml文件 <rdf:RDF xmlns:rdf="http://w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" > <foaf:Person> <foaf:name>Pete
<rdf:RDF xmlns:rdf="http://w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
>
<foaf:Person>
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>
这是程序输出
3
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<rdf:Description rdf:nodeID="Nababb97ad88341329a7cf22cec65c00c">
<rdf:type rdf:resource="http://w3.org/1999/02/22-rdf-syntax-ns#RDF"/>
<foaf:Person rdf:nodeID="Nfa7b9ab24fae4bcd9ffbaa13aeb733db"/>
</rdf:Description>
<rdf:Description rdf:nodeID="Nfa7b9ab24fae4bcd9ffbaa13aeb733db">
<rdf:type rdf:resource="http://xmlns.com/foaf/0.1/name"/>
</rdf:Description>
</rdf:RDF>
Test - 2
3
测试-2
我在输出中没有看到“彼得·帕克”这个名字。我做错什么了吗。
提前感谢。如果您只想检索数据,请尝试以下方法
from simplified_scrapy import utils, SimplifiedDoc, req
xml = '''
<rdf:RDF xmlns:rdf="http://w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
>
<foaf:Person>
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>
'''
# xml = utils.getFileContent('person_1.rdf')
doc = SimplifiedDoc(xml)
print(doc.select('foaf:Person>foaf:name>text()'))
# Or
print(doc.select('foaf:name>text()'))
# Or
print(doc.select('foaf:name'))
您将使用foafpersonal profile文档属性包围文档,如下所示
<foaf:PersonalProfileDocument>
<foaf:Person>
<foaf:family_name>Peter Parker</foaf:family_name>
</foaf:Person>
</foaf:PersonalProfileDocument>
</rdf:RDF>
我看不出解析这个RDF有任何问题——它是有效的RDF——但重新序列化时看不到好结果的原因是它是糟糕的RDF,没有意义!您需要标识person节点。如果你知道Peter Parker的URI是 然后您可以使用:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<foaf:Person rdf:about="http://example.com/person/pp">
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>
伯驾
如果您不知道Peter Parker的URI,可以使用空白节点:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<foaf:Person rdf:nodeID="ub2bL2C1">
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>
伯驾
但是RDF的所有功能都是为了更好地为用户分配URI。Hello Yazz,感谢您的解决方案。但是这个解决方案使用了一个不同于rdflib的模块。我正在努力学习rdflib的用法。我想知道为什么rdflib不能按预期工作。@LaeeqKhan对不起,我也不理解rdflib。祝你好运。我不是rdflib专家,但是没有foaf导入,也没有foaf:Person和foaf:name的声明,所以解析器会被它们的使用弄糊涂。它可以解释结果。@Ignazio它不是关于导入的,不是OWL,而是普通的RDFlong存储简短:它只是无效的RDF/XML-它看起来更像是带有一些前缀的普通XML。请与RDF/XML语法规范进行比较:-您应该看到一些明显的区别
from rdflib.namespace import FOAF , XSD
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<foaf:Person rdf:about="http://example.com/person/pp">
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<foaf:Person rdf:nodeID="ub2bL2C1">
<foaf:name>Peter Parker</foaf:name>
</foaf:Person>
</rdf:RDF>