我有一个阻止SKOS文件,我试图用xml.dom.minidom读取。这是一个示例条目:
<rdf:Description rdf:about="http://...">
<rdf:type rdf:resource="http://www.w3.org/2004/02/skos/core#Concept"/>
<skos:narrowMatch rdf:resource="http://dbpedia.org/resource/Biology"/>
<skos:narrowMatch rdf:resource="http://rdf.freebase.com/ns/m.01540"/>
<skos:prefLabel xml:lang="en">Biology and Biochemistry</skos:prefLabel>
<skos:scopeNote xml:lang="en">Used for all coverage of biology and biochemistry unless a more narrow term applies.</skos:scopeNote>
</rdf:Description>
我可以访问所有skos:prefLabel的类似......
for element in dom.getElementsByTagName('skos:prefLabel'):
print element.firstChild.data
但我想要相关的skos:ScopeNote。我只是使用了错误的工具吗?
答案 0 :(得分:1)
我不知道更好的方法,但我会做以下事情:
以下是代码:
for element in doc.getElementsByTagName('skos:prefLabel'):
print element.firstChild.data
sibbling = element.parentNode.getElementsByTagName('skos:scopeNote')[0]
print sibbling.firstChild.data
getElementsByTagName()
返回一个列表,并且我确信在父项下有一个该名称的节点,我继续抓住第一个节点(索引[0]
)element.nextSibbling
,但它将新行作为“节点”返回。我可以继续查询下一个sibbling,直到找到我要找的东西,但那是很多代码。此外,无法保证 scopeNote 将遵循 prefLabel ,因此访问父级和搜索更安全。答案 1 :(得分:1)
你可以试试这个
discriptions = doc.getElementsByTagName("rdf:Description")
for dis in discriptions:
siblings = dis.childNodes
for sib in siblings:
if str(sib.nodeName)=="skos:prefLabel" :
preflabel = sib.firstChild.data
if str(sib.nodeName)=="skos:scopeNote":
scopenote = sib.firstChild.data