SPARQL HTML рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рддрд╛ рд╣реИ

рдирдорд╕реНрддреЗ
рдПрдХ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдХреЗ рдЕрд╡рддрд╛рд░ рдореИрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред
рдпрд╣ рдкреЛрд╕реНрдЯ рдЧреНрд░реИрдм рдФрд░ rdflib рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП SPARQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рд╡рд░реНрдЧ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд░реВрдк (rdf-triples, xml, json) рдореЗрдВ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ "рдорд╢реАрдиреЛрдВ" рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред


Html рд╕рд╛рдордЧреНрд░реА рдореЗрдВ SPARQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп rdf рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ html рдкреЗрдЬ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдбрд╝рдкрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рднрд░реЗрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ SPARQL рдкреНрд▓рдЧрдЗрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред

# -*- coding: utf-8 -*- import grab import rdflib from rdflib import * from rdflib import plugin plugin.register( 'sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor') plugin.register( 'sparql', rdflib.query.Result, 'rdfextras.sparql.query', 'SPARQLQueryResult') 


рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
рдбрд┐рдЬрд╛рдЗрдирд░ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ url рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЧреИрд░-рдорд╛рдирдХ рд╕реНрдерд╛рди рдХреЛ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

 class SQtHD(): ''' sparql query to html documents ''' def __init__(self,url=None,htmlNamespace='http://localhost/rdf/html#'): ''' Constructor ''' self.__grab__=grab.Grab()#  self.__storage__=Graph()#  self.__namespace__=Namespace(htmlNamespace)#   self.__storage__.bind('html', URIRef(htmlNamespace))#     self.__initnamespace__=dict(self.__storage__.namespace_manager.namespaces()) if url:# ,       . self.__store__(url) 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

  def __store__(self,url): self.__storage__.remove((None,None,None))#  self.__grab__.go(url)#      grab root=self.__grab__.tree.getroottree().getroot() self.__parse__(root)#  . 


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╕реНрддреБ рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:

рдЕрдЧрд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдкреЗрдбрд╝ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИред

  def __parse__(self,element,parent=None,children_position=None,children_level=0): current_element=BNode() children_elements=element.getchildren() if str(element.tag)=='<built-in function Comment>': self.__storage__.add((current_element, RDF.type, self.__namespace__['comment'])) else: self.__storage__.add((current_element, RDF.type, self.__namespace__[element.tag])) if not parent==None: self.__storage__.add((current_element,self.__namespace__['parent'],parent)) self.__storage__.add((parent,self.__namespace__['children'], current_element)) self.__storage__.add((current_element,self.__namespace__['children_position'], Literal(children_position))) self.__storage__.add((current_element,self.__namespace__['children_level'], Literal(children_level))) if element.text and len(element.text.strip())>0: self.__storage__.add((current_element,self.__namespace__['text'], Literal(element.text.strip()))) if element.text_content() and len(element.text_content().strip())>0: self.__storage__.add((current_element,self.__namespace__['text_content'], Literal(element.text_content().strip()))) self.__storage__.add((current_element,self.__namespace__['children_count'], Literal(len(children_elements)))) for i in element.attrib: self.__storage__.add((current_element,self.__namespace__[i], Literal(element.attrib[i]))) for i in range(len(children_elements)): self.__parse__(children_elements[i],current_element,i,children_level+1) 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ SPARQL рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

  def executeQuery(self,query,url=None): ''' execute query on storadge ''' if url:# ,       . self.__store__(url) return self.__storage__.query(query, initNs=self.__initnamespace__)#   . 


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рднрд░рддрд╛ рд╣реИред

  def loadStoradge(self,url): ''' load and parse html page to local rdf storadge ''' self.__store__(url) 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХреБрдЫ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдЙрджрд╛рд╣рд░рдгред

 if __name__ == "__main__": endPoint = SQtHD()#   SQtHD endPoint.loadStoradge('http://habrahabr.ru')#    print "All sources for images given by tag <img>:"#     q=endPoint.executeQuery('SELECT DISTINCT ?src { ?a rdf:type html:img. ?a html:src ?src. }') for row in q.result: print row print print "All link urls:"#     q=endPoint.executeQuery('SELECT DISTINCT ?href { ?a rdf:type html:a. ?a html:href ?href. }') for row in q.result: print row print print "All class names for elements:"#     q=endPoint.executeQuery('SELECT DISTINCT ?class { ?a html:class ?class. }') for row in q.result: print row print ''' print "All scripts (without loaded by src):"#   . q=endPoint.executeQuery('SELECT ?text { ?a rdf:type html:script. ?a html:text ?text. }') for row in q.result: print row print''' print "All script srcs:"#   . q=endPoint.executeQuery('SELECT ?src { ?a rdf:type html:script. ?a html:src ?src. }') for row in q.result: print row print 


рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

 All script srcs: /javascripts/1341931979/all.js /javascripts/1341931979/_parts/posts.js /javascripts/1341931979/_parts/to_top.js /javascripts/1341931979/_parts/shortcuts.js /javascripts/1341931979/libs/jquery.form.js /javascripts/1341931979/facebook_reader.js /js/1341931979/adriver.core.2.js /javascripts/1341931979/libs/highlight.js /javascripts/1341931979/hubs/all.js /javascripts/1341931979/posts/all.js 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрдВрдбрд╛рд░ рдХреЛ рднрд░рдиреЗ рдХреЗ 3 рддрд░реАрдХреЗ рд╣реИрдВ:
  1. рдХреНрд▓рд╛рд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ
  2. LoadStoradge рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
  3. рд╣рд░ рднрдВрдбрд╛рд░рдг рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП


GIST рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ xml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░рд┐рднрд╛рд╖рд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдирд╛рдо рд╕реНрдерд╛рди рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЯреИрдЧ рдХреНрдпрд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рдЧреБрдгреЛрдВ рдФрд░ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рджреЗрддрд╛ рд╣реИ, рдФрд░ html 4 рдЯреИрдЧ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрд╢рдВрд╕рд┐рдд рдкрдврд╝рдиреЗ:
рдЯреЛрдмреА рд╕реЗрдЧрд░рд╛рди, рдХреЙрд▓рд┐рди рдЗрд╡рд╛рдВрд╕, рдЬреЗрдореА рдЯреЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ "рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ"

Source: https://habr.com/ru/post/In147579/


All Articles