Mercurial > repos > guerler > springsuite
diff planemo/lib/python3.7/site-packages/rdflib/plugins/parsers/pyRdfa/embeddedRDF.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler | 
|---|---|
| date | Fri, 31 Jul 2020 00:32:28 -0400 | 
| parents | |
| children | 
line wrap: on
 line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/planemo/lib/python3.7/site-packages/rdflib/plugins/parsers/pyRdfa/embeddedRDF.py Fri Jul 31 00:32:28 2020 -0400 @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +""" +Extracting possible embedded RDF/XML content from the file and parse it separately into the Graph. This is used, for example +by U{SVG 1.2 Tiny<http://www.w3.org/TR/SVGMobile12/>}. + +@author: U{Ivan Herman<a href="http://www.w3.org/People/Ivan/">} +@license: This software is available for use under the +U{W3C® SOFTWARE NOTICE AND LICENSE<href="http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231">} +@contact: Ivan Herman, ivan@w3.org +@version: $Id: embeddedRDF.py,v 1.15 2012/11/16 17:51:53 ivan Exp $ +""" + +# Python 3 foolproof way... +try : + from io import StringIO +except : + from io import StringIO + +from .host import HostLanguage, accept_embedded_rdf_xml, accept_embedded_turtle +from .utils import return_XML +import re, sys + +def handle_embeddedRDF(node, graph, state) : + """ + Handles embedded RDF. There are two possibilities: + + - the file is one of the XML dialects that allows for an embedded RDF/XML portion. See the L{host.accept_embedded_rdf_xml} for those (a typical example is SVG). + - the file is HTML and there is a turtle portion in the C{<script>} element with type text/turtle. + + @param node: a DOM node for the top level element + @param graph: target rdf graph + @type graph: RDFLib's Graph object instance + @param state: the inherited state (namespaces, lang, etc) + @type state: L{state.ExecutionContext} + @return: whether an RDF/XML or turtle content has been detected or not. If TRUE, the RDFa processing should not occur on the node and its descendents. + @rtype: Boolean + """ + #def _get_prefixes_in_turtle() : + # retval = "" + # for key in state.term_or_curie.ns : + # retval += "@prefix %s: <%s> .\n" % (key, state.term_or_curie.ns[key]) + # retval += '\n' + # return retval + + # This feature is optional! + def _get_literal(Pnode): + """ + Get the full text + @param Pnode: DOM Node + @return: string + """ + rc = "" + for node in Pnode.childNodes: + if node.nodeType in [node.TEXT_NODE, node.CDATA_SECTION_NODE] : + rc = rc + node.data + # Sigh... the HTML5 parser does not recognize the CDATA escapes, ie, it just passes on the <![CDATA[ and ]]> strings:-( + return rc.replace("<![CDATA[","").replace("]]>","") + + if state.options.embedded_rdf : + # Embedded turtle, per the latest Turtle draft + if state.options.host_language in accept_embedded_turtle and node.nodeName.lower() == "script" : + if node.hasAttribute("type") and node.getAttribute("type") == "text/turtle" : + #prefixes = _get_prefixes_in_turtle() + #content = _get_literal(node) + #rdf = StringIO(prefixes + content) + content = _get_literal(node) + rdf = StringIO(content) + try : + graph.parse(rdf, format="n3", publicID = state.base) + state.options.add_info("The output graph includes triples coming from an embedded Turtle script") + except : + (type,value,traceback) = sys.exc_info() + state.options.add_error("Embedded Turtle content could not be parsed (problems with %s?); ignored" % value) + return True + elif state.options.host_language in accept_embedded_rdf_xml and node.localName == "RDF" and node.namespaceURI == "http://www.w3.org/1999/02/22-rdf-syntax-ns#" : + rdf = StringIO(return_XML(state, node)) + try : + graph.parse(rdf) + state.options.add_info("The output graph includes triples coming from an embedded RDF/XML subtree") + except : + (type,value,traceback) = sys.exc_info() + state.options.add_error("Embedded RDF/XML content could not parsed (problems with %s?); ignored" % value) + return True + else : + return False + else : + return False +
