§
    kÃ¿a<î  ã                   ó  — U d Z ddlZddlmZ g d¢ZddlZddlZddlZddlZ	ddl
mZmZm
Z
mZ ddlmZmZ ddlmZ ddlmZmZmZmZmZmZ dd	lmZmZ dd
lmZmZ ddlZddl m!Z! ddl"m#Z# ddl"m$Z$ ddl"m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ e)rddl0m1Z1m2Z2m3Z3m4Z4m5Z5  ej6        e7¦  «        Z8dZ9dZ:i Z;e+e<df         e=d<   dZ>d„ Z? ed¦  «        Z@de<fd„ZAd„ ZB G d„ deC¦  «        ZD G d„ d eDe<¦  «        ZE G d!„ d"eE¦  «        ZF G d#„ d$eF¦  «        ZG G d%„ d&eG¦  «        ZHd'„ ZId(„ ZJ G d)„ deE¦  «        ZK G d*„ d+eE¦  «        ZLd,„ ZMd-„ ZNd.„ ZOd/„ ZPd0„ ZQd1ZRd2ZS eFeSd3z   ¦  «        ZT eFeSd4z   ¦  «        ZU eFeRd5z   ¦  «        ZV eFeRd6z   ¦  «        ZW eFeRd7z   ¦  «        ZX eFeRd8z   ¦  «        ZY eFeRd9z   ¦  «        ZZ eFeRd:z   ¦  «        Z[ eFeRd;z   ¦  «        Z\ eFeRd<z   ¦  «        Z] eFeRd=z   ¦  «        Z^ eFeRd>z   ¦  «        Z_ eFeRd?z   ¦  «        Z` eFeRd@z   ¦  «        Za eFeRdAz   ¦  «        Zb eFeRdBz   ¦  «        Zc eFdC¦  «        Zd eFeRdDz   ¦  «        Ze eFeRdEz   ¦  «        Zf eFeRdFz   ¦  «        Zg eFeRdGz   ¦  «        Zhe\e[eZ eFeRd8z   ¦  «         eFeRdHz   ¦  «         eFeRdIz   ¦  «         eFeRdJz   ¦  «         eFeRdKz   ¦  «         eFeRdLz   ¦  «         eFeRdMz   ¦  «         eFeRdNz   ¦  «         eFeRdOz   ¦  «         eFeRdPz   ¦  «         eFeRdQz   ¦  «         eFeRdRz   ¦  «         eFeRdSz   ¦  «        fZie\e]eZe[edfZj eFeRd8z   ¦  «        eZe[fZke
dT„ edU„ e	jl        jm        jn        dV„ iZoeVeTeU eFeRd6z   ¦  «         eFeRd7z   ¦  «        fZpdW„ ZqdX„ Zre<dYfesdeZffetdZ„ e]ffeude\ffe!de\ffe'd[„ e[ffe
d\„ e^ffed]„ e_ffed^„ e`ffed_„ eaffed`„ ebffe	jl        jm        jn        eOeTffe	jl        jm        jv        eOeUffededffgZweegfda„ feehfdb„ fe<effefexeffefe<eefefexeefefgZyi dd“ eFeRd?z   ¦  «        e“ eFeRd>z   ¦  «        e“ eFeRdFz   ¦  «        e“ eFeRdGz   ¦  «        e“ eFeRd=z   ¦  «        e“ eFeRd@z   ¦  «        e“ eFeRdAz   ¦  «        e“ eFeRdBz   ¦  «        e“ eFeRdEz   ¦  «        eP“ eFeRd5z   ¦  «        d“ eFeRd6z   ¦  «        d“ eFeRd7z   ¦  «        d“ eFeRdcz   ¦  «        d“ eFeRd<z   ¦  «        eQ“ eFeRd:z   ¦  «        e'“ eFeRd;z   ¦  «        e!“i  eFeRdMz   ¦  «        eu“ eFeRdJz   ¦  «        e!“ eFeRdLz   ¦  «        eu“ eFeRdKz   ¦  «        eu“ eFeRdIz   ¦  «        e!“ eFeRdRz   ¦  «        e!“ eFeRdNz   ¦  «        eu“ eFeRdOz   ¦  «        eu“ eFeRdQz   ¦  «        e!“ eFeRdHz   ¦  «        eu“ eFeRdSz   ¦  «        eu“ eFeRdPz   ¦  «        eu“ eFeRd8z   ¦  «        es“ eFeRd9z   ¦  «        es“ eFeRdDz   ¦  «        e“ eFeRddz   ¦  «        d“eTeM“¥eUeNi¥Zzi Z{e{ |                    ez¦  «         de„ Z}df„ Z~dg„ Z	 dsdi„Z€ G dj„ dkeE¦  «        Z� eeu¦  «        Z‚e+e/eD         euf         e=dl<   e‚ |                    eKdme�dneFdoeLdpi¦  «         dq„ Zƒe7drk    rddl„Z„ e„j…        ¦   «          dS dS )ta˜  
This module defines the different types of terms. Terms are the kinds of
objects that can appear in a quoted/asserted triple. This includes those
that are core to RDF:

* :class:`Blank Nodes <rdflib.term.BNode>`
* :class:`URI References <rdflib.term.URIRef>`
* :class:`Literals <rdflib.term.Literal>` (which consist of a literal value,datatype and language tag)

Those that extend the RDF model into N3:

* :class:`Formulae <rdflib.graph.QuotedGraph>`
* :class:`Universal Quantifications (Variables) <rdflib.term.Variable>`

And those that are primarily for matching against 'Nodes' in the
underlying Graph:

* REGEX Expressions
* Date Ranges
* Numerical Ranges

é    N)ÚFraction)ÚbindÚNodeÚ
IdentifierÚURIRefÚBNodeÚLiteralÚVariable)ÚdateÚtimeÚdatetimeÚ	timedelta)ÚsubÚcompile)Údefaultdict)Ú
parse_timeÚ
parse_dateÚparse_datetimeÚDurationÚparse_durationÚduration_isoformat)Ú	b64decodeÚ	b64encode)ÚhexlifyÚ	unhexlify)Ú	long_type)Ú	urldefrag)Úurljoin)Úurlparse)ÚDecimal)ÚTYPE_CHECKINGÚAnyÚDictÚCallableÚOptionalÚUnionÚTypeé   )ÚAlternativePathÚInvPathÚNegatedPathÚSequencePathÚPathz/.well-known/genid/z/.well-known/genid/rdflib/r   Úskolemsz
<>" {}|\^`c                 ó(   — t           D ]	}|| v r dS Œ
dS )NFT)Ú_invalid_uri_chars)ÚuriÚcs     ú-/usr/lib/python3/dist-packages/rdflib/term.pyÚ_is_valid_urir4   P   s+   € Ýð ð ˆØ�ˆ8ˆ8Ø�5�5ð àˆ4ó    z^[a-zA-Z]+(?:-[a-zA-Z0-9]+)*$Útagc                 óP   — t          t                               | ¦  «        ¦  «        S ©N)ÚboolÚ_lang_tag_regexÚmatch)r6   s    r3   Ú_is_valid_langtagr<   Z   s   € Ý•×%Ò% cÑ*Ô*Ñ+Ô+Ð+r5   c                 ó¤   — t          | t          ¦  «        rt          | d¦  «        d}}n	t          | }}	  ||¦  «         n# t          $ r Y dS w xY wdS )z[
    Verify that the provided value can be converted into a Python
    unicode object.
    Údecodeúutf-8FT)Ú
isinstanceÚbytesÚgetattrÚstrÚUnicodeError)ÚvalueÚcoding_funcÚparams      r3   Ú_is_valid_unicoderH   ^   ss   € õ
 �%�ÑÔð (Ý$ U¨HÑ5Ô5°w�Uˆˆå  %�UˆðØˆ�EÑÔÐÐøÝð ð ð Øˆuˆuðøøøàˆ4s   ³? ¿
AÁAc                   ó   — e Zd ZdZdZdS )r   z
    A Node in the Graph.
    © N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rJ   r5   r3   r   r   p   s   € € € € € ðð ð €I€I€Ir5   r   c                   óh   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zddefd„Zej        ZdS )r   zg
    See http://www.w3.org/2002/07/rdf-identifer-terminology/
    regarding choice of terminology.
    rJ   c                 ó8   — t                                | |¦  «        S r8   )rC   Ú__new__©ÚclsrE   s     r3   rR   zIdentifier.__new__€   s   € Ý�{Š{˜3 Ñ&Ô&Ð&r5   c                 ó,   — |                       |¦  «        S )zNA "semantic"/interpreted equality function,
        by default, same as __eq__©Ú__eq__©ÚselfÚothers     r3   ÚeqzIdentifier.eqƒ   ó   € ð �{Š{˜5Ñ!Ô!Ð!r5   c                 ó,   — |                       |¦  «        S )zOA "semantic"/interpreted not equal function,
        by default, same as __ne__)Ú__ne__rX   s     r3   ÚneqzIdentifier.neqˆ   r\   r5   c                 ó.   — |                       |¦  «         S r8   rV   rX   s     r3   r^   zIdentifier.__ne__�   s   € Ø—;’;˜uÑ%Ô%Ð%Ð%r5   c                 ó†   — t          | ¦  «        t          |¦  «        k    r t          | ¦  «        t          |¦  «        k    S dS )a”  
        Equality for Nodes.

        >>> BNode("foo")==None
        False
        >>> BNode("foo")==URIRef("foo")
        False
        >>> URIRef("foo")==BNode("foo")
        False
        >>> BNode("foo")!=URIRef("foo")
        True
        >>> URIRef("foo")!=BNode("foo")
        True
        >>> Variable('a')!=URIRef('a')
        True
        >>> Variable('a')!=Variable('a')
        False
        F)ÚtyperC   rX   s     r3   rW   zIdentifier.__eq__�   s7   € õ( �‰:Œ:�˜e™œÒ$Ð$Ý�t‘9”9¥ E¡
¤
Ò*Ð*à�5r5   c                 ó.  — |€dS t          | ¦  «        t          |¦  «        k    r t          | ¦  «        t          |¦  «        k    S t          |t          ¦  «        r6t          t          | ¦  «                 t          t          |¦  «                 k    S t
          S )a  
        This implements ordering for Nodes,

        This tries to implement this:
        http://www.w3.org/TR/sparql11-query/#modOrderBy

        Variables are not included in the SPARQL list, but
        they are greater than BNodes and smaller than everything else

        NT©rb   rC   r@   r   Ú	_ORDERINGÚNotImplementedrX   s     r3   Ú__gt__zIdentifier.__gt__©   sv   € ð ˆ=Ø�4Ý�$‰ZŒZ�4 ™;œ;Ò&Ð&Ý�t‘9”9�s 5™zœzÒ)Ð)Ý˜�tÑ$Ô$ð 	BÝ�T $™ZœZÔ(­9µT¸%±[´[Ô+AÒAÐAåÐr5   c                 ó.  — |€dS t          | ¦  «        t          |¦  «        k    r t          | ¦  «        t          |¦  «        k     S t          |t          ¦  «        r6t          t          | ¦  «                 t          t          |¦  «                 k     S t
          S ©NFrd   rX   s     r3   Ú__lt__zIdentifier.__lt__½   st   € Øˆ=Ø�5Ý�$‰ZŒZ�4 ™;œ;Ò&Ð&Ý�t‘9”9�s 5™zœzÒ)Ð)Ý˜�tÑ$Ô$ð 	BÝ�T $™ZœZÔ(­9µT¸%±[´[Ô+AÒAÐAåÐr5   c                 ó@   — |                       |¦  «        }|rdS | |k    S ©NT)rj   ©rY   rZ   Úrs      r3   Ú__le__zIdentifier.__le__Ç   ó*   € Ø�KŠK˜ÑÔˆØð 	Ø�4Ø�uŠ}Ðr5   c                 ó@   — |                       |¦  «        }|rdS | |k    S rl   )rg   rm   s      r3   Ú__ge__zIdentifier.__ge__Í   rp   r5   .Úreturnc                 ó`   — t          | ¦  «                             t          |¦  «        ¦  «        S r8   )rC   Ú
startswith)rY   ÚprefixÚstartÚends       r3   ru   zIdentifier.startswithÓ   s"   € Ý�4‰yŒy×#Ò#¥C¨¡K¤KÑ0Ô0Ð0r5   N)..)rK   rL   rM   rN   rO   rR   r[   r_   r^   rW   rg   rj   ro   rr   r9   ru   rC   Ú__hash__rJ   r5   r3   r   r   x   sÏ   € € € € € ðð ð
 €Ið'ð 'ð 'ð"ð "ð "ð
"ð "ð "ð
&ð &ð &ðð ð ð2ð ð ð(ð ð ðð ð ðð ð ð1ð 1¸ð 1ð 1ð 1ð 1ð Œ|€H€H€Hr5   r   c                   ó  ‡ — e Zd ZU dZdZed ed         gdf         ed<   ed gdf         ed<   ed gdf         ed	<   ed ed         gd
f         ed<   ddede	e         fd„Z
d„ Zddefd„Zd„ Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   zT
    RDF URI Reference: http://www.w3.org/TR/rdf-concepts/#section-Graph-URIref
    rJ   )r   r-   r)   Ú__or__r*   Ú
__invert__r+   Ú__neg__r,   Ú__truediv__NrE   Úbasec                 óz  — |�C|                      d¦  «        }t          ||d¬¦  «        }|r|                      d¦  «        s|dz  }t          |¦  «        st                               d|z  ¦  «         	 t
                               | |¦  «        }n,# t          $ r t
                               | |d¦  «        }Y nw xY w|S )Nú#r(   )Úallow_fragmentszG%s does not look like a valid URI, trying to serialize this will break.r?   )Úendswithr   r4   ÚloggerÚwarningrC   rR   ÚUnicodeDecodeError)rT   rE   r   Úends_in_hashÚrts        r3   rR   zURIRef.__new__é   sÖ   € ØÐØ Ÿ>š>¨#Ñ.Ô.ˆLÝ˜D %¸Ð;Ñ;Ô;ˆEØð !Ø—~’~ cÑ*Ô*ð !Ø˜S‘L�Eå˜UÑ#Ô#ð 	Ý�NŠNØYØññô ð ð
	2Ý—’˜S %Ñ(Ô(ˆBˆBøÝ!ð 	2ð 	2ð 	2Ý—’˜S %¨Ñ1Ô1ˆBˆBˆBð	2øøøàˆ	s   Á3B Â&B8Â7B8c                 ó    — t          | ¦  «        S r8   ©rC   ©rY   s    r3   ÚtoPythonzURIRef.toPythoný   ó   € Ý�4‰yŒyÐr5   rs   c                 ó|   — t          | ¦  «        st          d| z  ¦  «        ‚|r|                     | ¦  «        S d| z  S )a  
        This will do a limited check for valid URIs,
        essentially just making sure that the string includes no illegal
        characters (``<, >, ", {, }, |, \, `, ^``)

        :param namespace_manager: if not None, will be used to make up
             a prefixed name
        zn"%s" does not look like a valid URI, I cannot serialize this as N3/Turtle. Perhaps you wanted to urlencode it?ú<%s>)r4   Ú	ExceptionÚnormalizeUri©rY   Únamespace_managers     r3   Ún3z	URIRef.n3   s\   € õ ˜TÑ"Ô"ð 	Ýð AØññô ð ð
 ð 	!Ø$×1Ò1°$Ñ7Ô7Ð7à˜D‘=Ð r5   c                 óP   — d| v r!t          | ¦  «        \  }}t          |¦  «        S | S )Nr�   )r   r   )rY   ÚurlÚfrags      r3   ÚdefragzURIRef.defrag  s+   € Ø�$ˆ;ˆ;Ý! $™œ‰IˆC�Ý˜#‘;”;ÐàˆKr5   c                 ó0   — t           t          | ¦  «        ffS r8   )r   rC   r‹   s    r3   Ú
__reduce__zURIRef.__reduce__  s   € Ý�˜T™œ˜Ð%Ð%r5   c                 ó"   — t          | ¦  «        fS r8   rŠ   r‹   s    r3   Ú__getnewargs__zURIRef.__getnewargs__  ó   € Ý�D‘	”	ˆ|Ðr5   c                 ó˜   •— | j         t          u rd}n| j         j        }|›dt          t          | ¦  «                             ¦   «         ›d�S )Nzrdflib.term.URIRefú(ú))Ú	__class__r   rK   ÚsuperÚ__repr__©rY   ÚclsNamer¡   s     €r3   r£   zURIRef.__repr__"  sL   ø€ ØŒ>�VÐ#Ð#Ø*ˆGˆGà”nÔ-ˆGà&˜w˜w­­f°dÑ(;Ô(;×(DÒ(DÑ(FÔ(FÐ(FÐ(FÐGÐGr5   c                 óL   — |                       t          | ¦  «        |z   ¦  «        S r8   ©r¡   rC   rX   s     r3   Ú__add__zURIRef.__add__*  ó   € Ø�~Š~�c $™iœi¨%Ñ/Ñ0Ô0Ð0r5   c                 óL   — |                       |t          | ¦  «        z   ¦  «        S r8   r§   rX   s     r3   Ú__radd__zURIRef.__radd__-  s   € Ø�~Š~˜e¥c¨$¡i¤iÑ/Ñ0Ô0Ð0r5   c                 óL   — |                       t          | ¦  «        |z  ¦  «        S r8   r§   rX   s     r3   Ú__mod__zURIRef.__mod__0  r©   r5   c                 óf  — t          | t          ¦  «        rAt          d| z  ¦  «        }t          |j        t          t          ¦  «        d…         ¬¦  «        S t          | t          ¦  «        r5d| z  }|t          v rt          |         S t          ¦   «         }|t          |<   |S t          d| z  ¦  «        ‚)a  Create a Blank Node from a skolem URI, in accordance
        with http://www.w3.org/TR/rdf11-concepts/#section-skolemization.
        This function accepts only rdflib type skolemization, to provide
        a round-tripping within the system.

        .. versionadded:: 4.0
        ú%sN©rE   z<%s> is not a skolem URI)
r@   ÚRDFLibGenidr   r   ÚpathÚlenÚrdflib_skolem_genidÚGenidr.   r�   )rY   Ú
parsed_uriÚbnode_idÚretvals       r3   Úde_skolemizezURIRef.de_skolemize3  s«   € õ �d�KÑ(Ô(ð 	?Ý! $¨¡+Ñ.Ô.ˆJÝ˜zœ­sÕ3FÑ/GÔ/GÐ/IÐ/IÔJÐKÑKÔKÐKÝ˜�eÑ$Ô$ð 		?Ø˜d‘{ˆHØ�7Ð"Ð"Ý˜xÔ(Ð(å™œ�Ø$*•˜Ñ!Ø�åÐ6¸Ñ=Ñ>Ô>Ð>r5   r8   )rK   rL   rM   rN   rO   r$   r&   Ú__annotations__rC   r%   rR   rŒ   r”   r˜   rš   rœ   r£   r¨   r«   r­   r¹   Ú__classcell__©r¡   s   @r3   r   r   Ý   s†  ø€ € € € € € ðð ð €Ià�h Ð&6Ô 7Ð8Ð:KÐKÔLÐLÐLÑLØ˜(˜ YÐ.Ô/Ð/Ð/Ñ/Ø�x�j -Ð/Ô0Ð0Ð0Ñ0Ø˜8 UÐ+;Ô%<Ð=¸~ÐMÔNÐNÐNÑNðð ˜Cð  x°¤}ð ð ð ð ð(ð ð ð!ð !¨Cð !ð !ð !ð !ð*ð ð ð&ð &ð &ðð ð ðHð Hð Hð Hð Hð1ð 1ð 1ð1ð 1ð 1ð1ð 1ð 1ð?ð ?ð ?ð ?ð ?ð ?ð ?r5   r   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )rµ   rJ   c                 óº   — t          | t          ¦  «        st          | ¦  «        } t          | ¦  «        }|j                             t
          ¦  «        }|dk    rdS dS )Nr   FT)r@   rC   r   r²   ÚrfindÚskolem_genid©r1   r¶   Úgen_ids      r3   Ú_is_external_skolemzGenid._is_external_skolemM  sR   € å˜#�sÑ#Ô#ð 	Ý�c‘(”(ˆCÝ˜c‘]”]ˆ
Ø”×&Ò&¥|Ñ4Ô4ˆØ�QŠ;ˆ;Ø�5Øˆtr5   N)rK   rL   rM   rO   ÚstaticmethodrÃ   rJ   r5   r3   rµ   rµ   J  s2   € € € € € Ø€Iàðð ñ „\ðð ð r5   rµ   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )r±   rJ   c                 ó   — t          | t          ¦  «        st          | ¦  «        } t          | ¦  «        }|j        dk    s|j        dk    s|j        dk    rdS |j                             t          ¦  «        }|dk    rdS dS )NÚ Fr   T)	r@   rC   r   ÚparamsÚqueryÚfragmentr²   r¿   r´   rÁ   s      r3   Ú_is_rdflib_skolemzRDFLibGenid._is_rdflib_skolem[  s‚   € å˜#�sÑ#Ô#ð 	Ý�c‘(”(ˆCÝ˜c‘]”]ˆ
àÔ Ò#Ð#ØÔ 2Ò%Ð%ØÔ" bÒ(Ð(à�5Ø”×&Ò&Õ':Ñ;Ô;ˆØ�QŠ;ˆ;Ø�5Øˆtr5   N)rK   rL   rM   rO   rÄ   rË   rJ   r5   r3   r±   r±   X  s2   € € € € € Ø€Iàðð ñ „\ðð ð r5   r±   c                  ó   — dS )NÚNrJ   rJ   r5   r3   Ú
_unique_idrÎ   l  s	   € ð ˆ3r5   c                  ó   ‡— ddl mŠ ˆfd„} | S )zA
    Generates UUID4-based but ncname-compliant identifiers.
    r   ©Úuuid4c                  ó"   •—  ‰ ¦   «         j         S r8   )ÚhexrÐ   s   €r3   Ú
_generatorz,_serial_number_generator.<locals>._generator  s   ø€ Øˆu‰wŒwŒ{Ðr5   )ÚuuidrÑ   )rÔ   rÑ   s    @r3   Ú_serial_number_generatorrÖ   y  s8   ø€ ð ÐÐÐÐÐðð ð ð ð ð Ðr5   c                   ól   — e Zd ZdZdZd e¦   «          e¦   «         fd„Zd„ Zdd„Z	d„ Z
d„ Zd	„ Zdd
„ZdS )r   zM
    Blank Node: http://www.w3.org/TR/rdf-concepts/#section-blank-nodes

    rJ   Nc                 ó`   — |€ |¦   «         }|›|›�}n	 t                                | |¦  «        S )zE
        # only store implementations should pass in a value
        )r   rR   )rT   rE   Ú_sn_genÚ_prefixÚnode_ids        r3   rR   zBNode.__new__�  sC   € ð ˆ=ð �g‘i”iˆGØ%˜g w wÐ/ˆEˆEð õ ×!Ò! # uÑ-Ô-Ð-r5   c                 ó    — t          | ¦  «        S r8   rŠ   r‹   s    r3   rŒ   zBNode.toPython¢  r�   r5   c                 ó   — d| z  S )Nz_:%srJ   r’   s     r3   r”   zBNode.n3¥  s   € Ø˜‰}Ðr5   c                 ó"   — t          | ¦  «        fS r8   rŠ   r‹   s    r3   rœ   zBNode.__getnewargs__¨  r�   r5   c                 ó0   — t           t          | ¦  «        ffS r8   )r   rC   r‹   s    r3   rš   zBNode.__reduce__«  s   € Ý�˜D™	œ	�|Ð$Ð$r5   c                 óf   — | j         t          u rd}n| j         j        }|›dt          | ¦  «        ›d�S )Nzrdflib.term.BNodez('z'))r¡   r   rK   rC   )rY   r¥   s     r3   r£   zBNode.__repr__®  s9   € ØŒ>�UÐ"Ð"Ø)ˆGˆGà”nÔ-ˆGØ!(  ­#¨d©)¬)¨)¨)Ð4Ð4r5   c                 ó|   — |€d}|€t           }|›t          | ¦  «        ›�}t          t          ||¦  «        ¦  «        S )z³Create a URIRef "skolem" representation of the BNode, in accordance
        with http://www.w3.org/TR/rdf11-concepts/#section-skolemization

        .. versionadded:: 4.0
        Nzhttp://rdlib.net/)r´   rC   r±   r   )rY   Ú	authorityÚbasepathÚskolems       r3   Ú	skolemizezBNode.skolemizeµ  sF   € ð ÐØ+ˆIØÐÝ*ˆHØ#˜8¥S¨¡Y¤Y YÐ/ˆÝ�7 9¨fÑ5Ô5Ñ6Ô6Ð6r5   r8   ©NN)rK   rL   rM   rN   rO   rÖ   rÎ   rR   rŒ   r”   rœ   rš   r£   rå   rJ   r5   r3   r   r   …  s¶   € € € € € ðð ð
 €Ið Ð!9Ð!9Ñ!;Ô!;ÀZÀZÁ\Ä\ð.ð .ð .ð .ð*ð ð ðð ð ð ðð ð ð%ð %ð %ð5ð 5ð 5ð7ð 7ð 7ð 7ð 7ð 7r5   c            
       óX  ‡ — e Zd ZU dZeed<   dZ	 	 	 d'dedee         dee         dee	         fd	„Z
d
„ Zed„ ¦   «         Zedee         fd„¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d(d!„Z"d)d#„Z#d$„ Z$ˆ fd%„Z%d&„ Z&ˆ xZ'S )*r	   ai
  
    RDF Literal: http://www.w3.org/TR/rdf-concepts/#section-Graph-Literal

    The lexical value of the literal is the unicode object.
    The interpreted, datatyped value is available from .value

    Language tags must be valid according to :rfc:5646

    For valid XSD datatypes, the lexical form is optionally normalized
    at construction time. Default behaviour is set by rdflib.NORMALIZE_LITERALS
    and can be overridden by the normalize parameter to __new__

    Equality and hashing of Literals are done based on the lexical form, i.e.:

    >>> from rdflib.namespace import XSD

    >>> Literal('01') != Literal('1')  # clear - strings differ
    True

    but with data-type they get normalized:

    >>> Literal('01', datatype=XSD.integer) != Literal('1', datatype=XSD.integer)
    False

    unless disabled:

    >>> Literal('01', datatype=XSD.integer, normalize=False) != Literal('1', datatype=XSD.integer)
    True


    Value based comparison is possible:

    >>> Literal('01', datatype=XSD.integer).eq(Literal('1', datatype=XSD.float))
    True

    The eq method also provides limited support for basic python types:

    >>> Literal(1).eq(1) # fine - int compatible with xsd:integer
    True
    >>> Literal('a').eq('b') # fine - str compatible with plain-lit
    False
    >>> Literal('a', datatype=XSD.string).eq('a') # fine - str compatible with xsd:string
    True
    >>> Literal('a').eq(1) # not fine, int incompatible with plain-lit
    NotImplemented

    Greater-than/less-than ordering comparisons are also done in value
    space, when compatible datatypes are used.  Incompatible datatypes
    are ordered by DT, or by lang-tag.  For other nodes the ordering
    is None < BNode < URIRef < Literal

    Any comparison with non-rdflib Node are "NotImplemented"
    In PY3 this is an error.

    >>> from rdflib import Literal, XSD
    >>> lit2006 = Literal('2006-01-01',datatype=XSD.date)
    >>> lit2006.toPython()
    datetime.date(2006, 1, 1)
    >>> lit2006 < Literal('2007-01-01',datatype=XSD.date)
    True
    >>> Literal(datetime.utcnow()).datatype
    rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#dateTime')
    >>> Literal(1) > Literal(2) # by value
    False
    >>> Literal(1) > Literal(2.0) # by value
    False
    >>> Literal('1') > Literal(1) # by DT
    True
    >>> Literal('1') < Literal('1') # by lexical form
    False
    >>> Literal('a', lang='en') > Literal('a', lang='fr') # by lang-tag
    False
    >>> Literal(1) > URIRef('foo') # by node-type
    True

    The > < operators will eat this NotImplemented and throw a TypeError (py3k):

    >>> Literal(1).__gt__(2.0)
    NotImplemented


    Ú_value)Ú	_languageÚ	_datatyperè   NÚlexical_or_valueÚlangÚdatatypeÚ	normalizec                 óÔ  — |dk    rd }|�|nt           j        }|�|�t          d¦  «        ‚|�!t          |¦  «        st	          d|z  ¦  «        ‚|rt          |¦  «        }d }t          |t          ¦  «        r+|p|j        }|rt          ||¦  «        }n•|j
        }|j        }n†t          |t          ¦  «        st          |t          ¦  «        r;t          ||¦  «        }|�(|r&t          ||¦  «        \  }}|�t          |¦  «        r|}n!|}t          ||¦  «        \  }}|p|}|�|}|rd }t          |t          ¦  «        r|                     d¦  «        }|t"          t$          fv rt'          |¦  «        }|t$          fv rt)          |¦  «        }	 t                               | |¦  «        }n,# t,          $ r t                               | |d¦  «        }Y nw xY w||_        ||_        ||_        |S )NrÇ   zmA Literal can only have one of lang or datatype, per http://www.w3.org/TR/rdf-concepts/#section-Graph-Literalz!'%s' is not a valid language tag!r?   )ÚrdflibÚNORMALIZE_LITERALSÚ	TypeErrorr<   Ú
ValueErrorr   r@   r	   ÚlanguageÚ_castLexicalToPythonrí   rE   rC   rA   Ú_castPythonToLiteralrH   r>   Ú_XSD_NORMALISED_STRINGÚ
_XSD_TOKENÚ_normalise_XSD_STRINGÚ_strip_and_collapse_whitespacerR   r†   ré   rê   rè   )	rT   rë   rì   rí   rî   rE   rè   rê   Úinsts	            r3   rR   zLiteral.__new__  sY  € ð �2Š:ˆ:ØˆDà!*Ð!6�I�I½FÔ<Uˆ	àÐ Ð 4ÝðOñô ð ð
 ÐÕ$5°dÑ$;Ô$;ÐÝÐ@À4ÑGÑHÔHÐHàð 	(Ý˜hÑ'Ô'ˆHàˆÝÐ&­Ñ0Ô0ð 	ð Ð4Ð+Ô4ˆDØð /å,Ð-=¸xÑHÔH��à+Ô4�Ø(Ô.��åÐ(­#Ñ.Ô.ð 	µ*Ð=MÍuÑ2UÔ2Uð 	õ )Ð)9¸8ÑDÔDˆEàÐ  YÐ Ý$8¸ÀÑ$IÔ$IÑ!�˜	ØÐ%Õ*;¸FÑ*CÔ*CÐ%Ø'-Ð$øð %ˆEÝ 4Ð5EÀxÑ PÔ PÑˆF�IàÐ, 9ˆHØÐ!Ø#)Ð Øð Ø�åÐ&­Ñ.Ô.ð 	@Ø/×6Ò6°wÑ?Ô?ÐàÕ.µ
Ð;Ð;Ð;Ý4Ð5EÑFÔFÐà�
�}Ð$Ð$Ý=Ð>NÑOÔOÐð	?ÝŸKšK¨Ð-=Ñ>Ô>ˆDˆDøÝ!ð 	?ð 	?ð 	?Ý—;’;˜sÐ$4°gÑ>Ô>ˆDˆDˆDð	?øøøð ˆŒØ!ˆŒØˆŒàˆs   ÆF' Æ'&GÇGc                 óV   — | j         �!t          | j         | j        | j        ¬¦  «        S | S )a<  
        Returns a new literal with a normalised lexical representation
        of this literal
        >>> from rdflib import XSD
        >>> Literal("01", datatype=XSD.integer, normalize=False).normalize()
        rdflib.term.Literal(u'1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        Illegal lexical forms for the datatype given are simply passed on
        >>> Literal("a", datatype=XSD.integer, normalize=False)
        rdflib.term.Literal(u'a', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        N)rí   rì   )rE   r	   rí   rô   r‹   s    r3   rî   zLiteral.normalizei  s,   € ð Œ:Ð!Ý˜4œ:°´ÀDÄMÐRÑRÔRÐRàˆKr5   c                 ó   — | j         S r8   )rè   r‹   s    r3   rE   zLiteral.value|  s
   € àŒ{Ðr5   rs   c                 ó   — | j         S r8   )ré   r‹   s    r3   rô   zLiteral.language€  ó
   € àŒ~Ðr5   c                 ó   — | j         S r8   )rê   r‹   s    r3   rí   zLiteral.datatype„  rÿ   r5   c                 óH   — t           t          | ¦  «        | j        | j        ffS r8   )r	   rC   rô   rí   r‹   s    r3   rš   zLiteral.__reduce__ˆ  s#   € åÝ�‰YŒY˜œ t¤}Ð5ð
ð 	
r5   c                 ó<   — d t          | j        | j        ¬¦  «        fS )N)rô   rí   )Údictrô   rí   r‹   s    r3   Ú__getstate__zLiteral.__getstate__Ž  s   € Ø•d D¤M¸D¼MÐJÑJÔJÐKÐKr5   c                 óD   — |\  }}|d         | _         |d         | _        d S )Nrô   rí   )ré   rê   )rY   ÚargÚ_Úds       r3   Ú__setstate__zLiteral.__setstate__‘  s%   € Ø‰ˆˆ1Ø˜:œˆŒØ˜:œˆŒˆˆr5   c                 óp  — |€| S t          |t          ¦  «        st          |¦  «        }| j        |j        k    rCt          |                      ¦   «         |                     ¦   «         z   | j        | j        ¬¦  «        S | j        t
          v r©|j        t
          v r›t          t          dt          t          |                      ¦   «         ¦  «        t          |                     ¦   «         ¦  «        z   d¦  «        z                       d¦  «                             d¦  «        ¦  «        t          ¬¦  «        S 	 t                               | |¦  «        }n4# t          $ r' t          | j        ¦  «        t          |¦  «        z   }Y nw xY w| j        t          v r| j        }nt          }t          || j        |¬¦  «        S )zÒ
        >>> Literal(1) + 1
        rdflib.term.Literal(u'2', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))
        >>> Literal("1") + "1"
        rdflib.term.Literal(u'11')
        N)rí   z%fé   Ú0ú.)r@   r	   rí   rŒ   rô   Ú_NUMERIC_LITERAL_TYPESr    ÚroundÚrstripÚ_XSD_DECIMALrC   r¨   rò   rE   Ú_STRING_LITERAL_TYPESÚ_XSD_STRING)rY   ÚvalÚsÚnew_datatypes       r3   r¨   zLiteral.__add__–  s˜  € ð ˆ;ØˆKõ ˜#�wÑ'Ô'ð 	Ý˜#‘,”,ˆCð Œ=˜CœLÒ(Ð(ÝØ—’‘” #§,¢,¡.¤.Ñ0°$´-È$Ì-ðñ ô ð ð ŒMÕ3Ð3Ð3Ø”Õ 6Ð6Ð6åÝàÝ¥¨¯ª©¬Ñ 8Ô 8½7À3Ç<Â<Á>Ä>Ñ;RÔ;RÑ RÐTVÑWÔWñX÷ ’V˜C‘[”[ß’V˜C‘[”[ñô õ &ð
ñ 
ô 
ð 
ð/Ý—K’K  cÑ*Ô*��øÝð /ð /ð /Ý˜œ
‘O”O¥c¨#¡h¤hÑ.���ð/øøøð Œ}Õ 5Ð5Ð5Ø#œ}��õ  +�å˜1˜dœm°lÐCÑCÔCÐCs   Ä4E Å.FÆ Fc                 ó^   — | j         �t          | j         ¦  «        S t          | ¦  «        dk    S )zc
        Is the Literal "True"
        This is used for if statements, bool(literal), etc.
        Nr   )rE   r9   r³   r‹   s    r3   Ú__bool__zLiteral.__bool__Ì  s,   € ð
 Œ:Ð!Ý˜œ
Ñ#Ô#Ð#Ý�4‰yŒy˜AŠ~Ðr5   c                 óÚ   — t          | j        t          t          t          f¦  «        r&t          | j                             ¦   «         ¦  «        S t          dt          | ¦  «        z  ¦  «        ‚)a©  
        >>> (- Literal(1))
        rdflib.term.Literal(u'-1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))
        >>> (- Literal(10.5))
        rdflib.term.Literal(u'-10.5', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#double'))
        >>> from rdflib.namespace import XSD
        >>> (- Literal("1", datatype=XSD.integer))
        rdflib.term.Literal(u'-1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        >>> (- Literal("1"))
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: Not a number; rdflib.term.Literal(u'1')
        >>>
        úNot a number; %s)	r@   rE   Úintr   Úfloatr	   r}   rò   Úreprr‹   s    r3   r}   zLiteral.__neg__Õ  sU   € õ" �d”j¥3­	µ5Ð"9Ñ:Ô:ð 	=Ý˜4œ:×-Ò-Ñ/Ô/Ñ0Ô0Ð0åÐ.µ°d±´Ñ;Ñ<Ô<Ð<r5   c                 óÚ   — t          | j        t          t          t          f¦  «        r&t          | j                             ¦   «         ¦  «        S t          dt          | ¦  «        z  ¦  «        ‚)a™  
        >>> (+ Literal(1))
        rdflib.term.Literal(u'1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))
        >>> (+ Literal(-1))
        rdflib.term.Literal(u'-1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))
        >>> from rdflib.namespace import XSD
        >>> (+ Literal("-1", datatype=XSD.integer))
        rdflib.term.Literal(u'-1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        >>> (+ Literal("1"))
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: Not a number; rdflib.term.Literal(u'1')
        r  )	r@   rE   r  r   r  r	   Ú__pos__rò   r  r‹   s    r3   r  zLiteral.__pos__ë  sU   € õ �d”j¥3­	µ5Ð"9Ñ:Ô:ð 	=Ý˜4œ:×-Ò-Ñ/Ô/Ñ0Ô0Ð0åÐ.µ°d±´Ñ;Ñ<Ô<Ð<r5   c                 óÚ   — t          | j        t          t          t          f¦  «        r&t          | j                             ¦   «         ¦  «        S t          dt          | ¦  «        z  ¦  «        ‚)a  
        >>> abs(Literal(-1))
        rdflib.term.Literal(u'1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        >>> from rdflib.namespace import XSD
        >>> abs( Literal("-1", datatype=XSD.integer))
        rdflib.term.Literal(u'1', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        >>> abs(Literal("1"))
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: Not a number; rdflib.term.Literal(u'1')
        r  )	r@   rE   r  r   r  r	   Ú__abs__rò   r  r‹   s    r3   r!  zLiteral.__abs__ÿ  sU   € õ �d”j¥3­	µ5Ð"9Ñ:Ô:ð 	=Ý˜4œ:×-Ò-Ñ/Ô/Ñ0Ô0Ð0åÐ.µ°d±´Ñ;Ñ<Ô<Ð<r5   c                 óÚ   — t          | j        t          t          t          f¦  «        r&t          | j                             ¦   «         ¦  «        S t          dt          | ¦  «        z  ¦  «        ‚)a%  
        >>> ~(Literal(-1))
        rdflib.term.Literal(u'0', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        >>> from rdflib.namespace import XSD
        >>> ~( Literal("-1", datatype=XSD.integer))
        rdflib.term.Literal(u'0', datatype=rdflib.term.URIRef(u'http://www.w3.org/2001/XMLSchema#integer'))

        Not working:

        >>> ~(Literal("1"))
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        TypeError: Not a number; rdflib.term.Literal(u'1')
        r  )	r@   rE   r  r   r  r	   r|   rò   r  r‹   s    r3   r|   zLiteral.__invert__  sU   € õ  �d”j¥3­	µ5Ð"9Ñ:Ô:ð 	=Ý˜4œ:×0Ò0Ñ2Ô2Ñ3Ô3Ð3åÐ.µ°d±´Ñ;Ñ<Ô<Ð<r5   c                 ó¢  — |€dS t          |t          ¦  «        �r˜| j        t          v r|j        t          v r| j        |j        k    S | j        pt
          }|j        pt
          }||k    rt          j        rt          S ||k    S | j	        |j	        k    r"| j	        sdS |j	        sdS | j	        |j	        k    S | j        �„|j        �}t          | j        ¦  «        t          v rAt          t          | j        ¦  «                 } || j        ¦  «         ||j        ¦  «        k    S 	 | j        |j        k    S # t          $ r Y nw xY wt          | ¦  «        t          |¦  «        k    r t          | ¦  «        t          |¦  «        k    S | j        |j        k    r"| j        sdS |j        sdS | j        |j        k    S dS t          |t          ¦  «        rdS t          S )a-  

        This implements ordering for Literals,
        the other comparison methods delegate here

        This tries to implement this:
        http://www.w3.org/TR/sparql11-query/#modOrderBy

        In short, Literals with compatible data-types are ordered in value
        space, i.e.
        >>> from rdflib import XSD

        >>> Literal(1) > Literal(2) # int/int
        False
        >>> Literal(2.0) > Literal(1) # double/int
        True
        >>> from decimal import Decimal
        >>> Literal(Decimal("3.3")) > Literal(2.0) # decimal/double
        True
        >>> Literal(Decimal("3.3")) < Literal(4.0) # decimal/double
        True
        >>> Literal('b') > Literal('a') # plain lit/plain lit
        True
        >>> Literal('b') > Literal('a', datatype=XSD.string) # plain lit/xsd:str
        True

        Incompatible datatype mismatches ordered by DT

        >>> Literal(1) > Literal("2") # int>string
        False

        Langtagged literals by lang tag
        >>> Literal("a", lang="en") > Literal("a", lang="fr")
        False
        NTF)r@   r	   rí   r  rE   r  rð   ÚDAWG_LITERAL_COLLATIONrf   rô   rb   Ú_TOTAL_ORDER_CASTERSrò   rC   r   )rY   rZ   ÚdtselfÚdtotherÚcasters        r3   rg   zLiteral.__gt__'  së  € ðH ˆ=Ø�4Ý�e�WÑ%Ô%ñ 7	"ð ”Õ!7Ð7Ð7Ø”NÕ&<Ð<Ð<à”z E¤KÒ/Ð/ð ”]Ð1¥kˆFØ”nÐ3­ˆGà˜Ò Ð ÝÔ0ð ,Ý)Ð)à! GÒ+Ð+àŒ} ¤Ò.Ð.Ø”}ð :Ø ˜5Øœð :Ø˜4àœ=¨5¬>Ò9Ð9àŒzÐ%¨%¬+Ð*AÝ˜œ
Ñ#Ô#Õ';Ð;Ð;Ý1µ$°t´zÑ2BÔ2BÔC�FØ!˜6 $¤*Ñ-Ô-°°°u´{Ñ0CÔ0CÒCÐCðØœ:¨¬Ò3Ð3øÝ ð ð ð Ø�Dðøøøõ �4‰yŒy�C ™JœJÒ&Ð&Ý˜4‘y”y¥3 u¡:¤:Ò-Ð-ð Œ} ¤Ò.Ð.Ø”}ð :Ø ˜5Øœð :Ø˜4àœ=¨5¬>Ò9Ð9à�5å˜�tÑ$Ô$ð 	"Ø�4å!Ð!s   ÄD/ Ä/
D<Ä;D<c                 óø   — |€dS t          |t          ¦  «        rD	 |                      |¦  «         o|                      |¦  «         S # t          $ r
 t
          cY S w xY wt          |t          ¦  «        rdS t
          S ri   )r@   r	   rg   r[   rò   rf   r   rX   s     r3   rj   zLiteral.__lt__†  sŽ   € Øˆ=Ø�5Ý�e�WÑ%Ô%ð 	&ð&ØŸ;š; uÑ-Ô-Ð-ÐD°d·g²g¸e±n´nÐ2DÐDøÝð &ð &ð &Ý%Ð%Ð%Ð%ð&øøøå�e�TÑ"Ô"ð 	Ø�5åÐs   ›+A ÁAÁAc                 óŽ   — |                       |¦  «        }|rdS 	 |                      |¦  «        S # t          $ r
 t          cY S w xY w)zÏ
        >>> from rdflib.namespace import XSD
        >>> Literal('2007-01-01T10:00:00', datatype=XSD.dateTime
        ...     ) <= Literal('2007-01-01T10:00:00', datatype=XSD.dateTime)
        True
        T)rj   r[   rò   rf   rm   s      r3   ro   zLiteral.__le__“  s^   € ð �KŠK˜ÑÔˆØð 	Ø�4ð	"Ø—7’7˜5‘>”>Ð!øÝð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøó   ›0 °AÁAc                 óŽ   — |                       |¦  «        }|rdS 	 |                      |¦  «        S # t          $ r
 t          cY S w xY wrl   )rg   r[   rò   rf   rm   s      r3   rr   zLiteral.__ge__¢  s\   € Ø�KŠK˜ÑÔˆØð 	Ø�4ð	"Ø—7’7˜5‘>”>Ð!øÝð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøør+  c                 ó~  — t          |t          ¦  «        r§| j        r6|j        r/| j        t          vs|j        t          vr| j        |j        k    rdS nj| j        t          k    r|j        s|j        t          k    r	| j        sdS | j        pd                     ¦   «         |j        pd                     ¦   «         k    rdS dS )zo
        Helper method to decide which things are meaningful to
        rich-compare with this literal
        FrÇ   T)r@   r	   rí   ÚXSDToPythonr  rô   ÚlowerrX   s     r3   Ú_comparable_tozLiteral._comparable_to«  sÈ   € õ
 �e�WÑ%Ô%ð 	!ØŒ}ð ! ¤ð !ð ”M­Ð4Ð4Ø”~­[Ð8Ð8ð ”}¨¬Ò6Ð6Ø$˜uøð œ­Ò4Ð4¸U¼^Ð4Ø”N¥kÒ1Ð1¸$¼-Ð1à ˜5ð ”MÐ' R×.Ò.Ñ0Ô0°U´^Ð5IÀr×4PÒ4PÑ4RÔ4RÒRÐRØ ˜5àˆtr5   c                 óÖ   — t                                | ¦  «        }| j        r)|t          | j                             ¦   «         ¦  «        z  }| j        r|t          | j        ¦  «        z  }|S )a±  
        >>> from rdflib.namespace import XSD
        >>> a = {Literal('1', datatype=XSD.integer):'one'}
        >>> Literal('1', datatype=XSD.double) in a
        False


        "Called for the key object for dictionary operations,
        and by the built-in function hash(). Should return
        a 32-bit integer usable as a hash value for
        dictionary operations. The only required property
        is that objects which compare equal have the same
        hash value; it is advised to somehow mix together
        (e.g., using exclusive or) the hash values for the
        components of the object that also play a part in
        comparison of objects." -- 3.4.1 Basic customization (Python)

        "Two literals are equal if and only if all of the following hold:
        * The strings of the two lexical forms compare equal, character by
        character.
        * Either both or neither have language tags.
        * The language tags, if any, compare equal.
        * Either both or neither have datatype URIs.
        * The two datatype URIs, if any, compare equal, character by
        character."
        -- 6.5.1 Literal Equality (RDF: Concepts and Abstract Syntax)

        )rC   ry   ré   Úhashr/  rê   )rY   Úress     r3   ry   zLiteral.__hash__È  sb   € õ< �lŠl˜4Ñ Ô ˆàŒ>ð 	0Ø•4˜œ×,Ò,Ñ.Ô.Ñ/Ô/Ñ/ˆCØŒ>ð 	(Ø•4˜œÑ'Ô'Ñ'ˆCØˆ
r5   c                 ó&  — | |u rdS |€dS t          |t          ¦  «        rq| j        |j        k    o`| j        r| j                             ¦   «         nd|j        r|j                             ¦   «         ndk    ot
                               | |¦  «        S dS )aË  
        Literals are only equal to other literals.

        "Two literals are equal if and only if all of the following hold:
        * The strings of the two lexical forms compare equal, character by character.
        * Either both or neither have language tags.
        * The language tags, if any, compare equal.
        * Either both or neither have datatype URIs.
        * The two datatype URIs, if any, compare equal, character by character."
        -- 6.5.1 Literal Equality (RDF: Concepts and Abstract Syntax)

        >>> Literal("1", datatype=URIRef("foo")) == Literal("1", datatype=URIRef("foo"))
        True
        >>> Literal("1", datatype=URIRef("foo")) == Literal("1", datatype=URIRef("foo2"))
        False

        >>> Literal("1", datatype=URIRef("foo")) == Literal("2", datatype=URIRef("foo"))
        False
        >>> Literal("1", datatype=URIRef("foo")) == "asdf"
        False
        >>> from rdflib import XSD
        >>> Literal('2007-01-01', datatype=XSD.date) == Literal('2007-01-01', datatype=XSD.date)
        True
        >>> Literal('2007-01-01', datatype=XSD.date) == date(2007, 1, 1)
        False
        >>> Literal("one", lang="en") == Literal("one", lang="en")
        True
        >>> Literal("hast", lang='en') == Literal("hast", lang='de')
        False
        >>> Literal("1", datatype=XSD.integer) == Literal(1)
        True
        >>> Literal("1", datatype=XSD.integer) == Literal("01", datatype=XSD.integer)
        True

        TNF)r@   r	   rê   ré   r/  rC   rW   rX   s     r3   rW   zLiteral.__eq__î  s¤   € ðH �5ˆ=ˆ=Ø�4Øˆ=Ø�5å�e�WÑ%Ô%ð 	à” %¤/Ò1ð ,Ø/3¬~ÐG�T”^×)Ò)Ñ+Ô+Ð+À4Ø/4¬ÐH�E”O×)Ò)Ñ+Ô+Ð+ÀDòJð,õ —J’J˜t UÑ+Ô+ð	ð ˆur5   c                 óZ  — t          |t          ¦  «        �r·| j        t          v r^|j        t          v rP| j        �|j        �| j        |j        k    S t
                               | |¦  «        rdS t          d| ›d|›�¦  «        ‚| j        pd 	                    ¦   «         |j        pd 	                    ¦   «         k    rdS | j        pt          }|j        pt          }|t          k    r&|t          k    rt
                               | |¦  «        S ||k    r-t          j        rt          d| j        ›d|j        ›�¦  «        ‚dS | j        �F|j        �?| j        t          t          fv rt          | j        |j        ¦  «        S | j        |j        k    S t
                               | |¦  «        rdS | j        t          k    rdS t          d| ›d|›�¦  «        ‚t          |t           ¦  «        rdS t          |t
          ¦  «        r4| j        �dS | j        t          k    s| j        €t          | ¦  «        |k    S nøt          |t"          t$          t&          f¦  «        r| j        t          v r| j        |k    S n¼t          |t(          t*          t,          f¦  «        r'| j        t.          t0          t2          fv r| j        |k    S nst          |t4          t6          f¦  «        r'| j        t8          t:          t<          fv r| j        |k    S n0t          |t>          ¦  «        r| j        t@          k    r| j        |k    S tB          S )aw  
        Compare the value of this literal with something else

        Either, with the value of another literal
        comparisons are then done in literal "value space",
        and according to the rules of XSD subtype-substitution/type-promotion

        OR, with a python object:

        basestring objects can be compared with plain-literals,
        or those with datatype xsd:string

        bool objects with xsd:boolean

        a int, long or float with numeric xsd types

        isodate date,time,datetime objects with xsd:date,xsd:time or xsd:datetime

        Any other operations returns NotImplemented

        NTzII cannot know that these two lexical forms do not map to the same value: z and rÇ   Fz4I don't know how to compare literals with datatypes )"r@   r	   rí   r  rE   rC   rW   rò   rô   r/  r  rð   r$  Ú_RDF_XMLLITERALÚ_RDF_HTMLLITERALÚ_isEqualXMLNoder   r  r   r  r   r   r   Ú_XSD_DATETIMEÚ	_XSD_DATEÚ	_XSD_TIMEr   r   Ú_XSD_DURATIONÚ_XSD_DAYTIMEDURATIONÚ_XSD_YEARMONTHDURATIONr9   Ú_XSD_BOOLEANrf   )rY   rZ   r&  r'  s       r3   r[   z
Literal.eq!  sH  € õ, �e�WÑ%Ô%ñ V	+ð ”Õ!7Ð7Ð7Ø”NÕ&<Ð<Ð<à”:Ð)¨e¬kÐ.EØœ:¨¬Ò4Ð4å—z’z $¨Ñ.Ô.ð $Ø#˜tÝ#˜)à˜4˜4  ð(ñô ð ð ”Ð# ×*Ò*Ñ,Ô,°´Ð1EÀ2×0LÒ0LÑ0NÔ0NÒNÐNØ�uà”]Ð1¥kˆFØ”nÐ3­ˆGà�Ò$Ð$¨µKÒ)?Ð)?å—z’z $¨Ñ.Ô.Ð.à˜Ò Ð ÝÔ0ð !Ý#˜)àœ=˜=˜=¨%¬.¨.ð:ñô ð ð
 !˜5ð ŒzÐ%¨%¬+Ð*Aà”=¥_Õ6FÐ$GÐGÐGÝ*¨4¬:°u´{ÑCÔCÐCà”z U¤[Ò0Ð0õ —:’:˜d EÑ*Ô*ð  Ø˜4à”=¥KÒ/Ð/Ø ˜5õ  �ià�t�t˜U˜Uð$ñô ð õ
 ˜�tÑ$Ô$ð 	+Ø�5å˜�sÑ#Ô#ð 	+ð Œ}Ð(Ø�uàŒ}¥Ò+Ð+¨t¬}Ð/DÝ˜4‘y”y EÒ)Ð)ð 0Eõ ˜¥¥YµÐ6Ñ7Ô7ð 	+ØŒ}Õ 6Ð6Ð6Ø”z UÒ*Ð*ð 7å˜¥¥hµÐ5Ñ6Ô6ð 	+ØŒ}¥µ	½9Ð EÐEÐEØ”z UÒ*Ð*ð Få˜¥	­8Ð4Ñ5Ô5ð 		+ØŒ}ÝÝ$Ý&ð!ð ð ð
 ”z UÒ*Ð*ðõ ˜�tÑ$Ô$ð 	+ØŒ}¥Ò,Ð,Ø”z UÒ*Ð*åÐr5   c                 ó.   — |                       |¦  «         S r8   )r[   rX   s     r3   r_   zLiteral.neq‘  s   € Ø—7’7˜5‘>”>Ð!Ð!r5   c                 ód   — |r|                       |j        ¬¦  «        S |                       ¦   «         S )ae  
        Returns a representation in the N3 format.

        Examples::

            >>> Literal("foo").n3()
            u'"foo"'

        Strings with newlines or triple-quotes::

            >>> Literal("foo\nbar").n3()
            u'"""foo\nbar"""'

            >>> Literal("''\'").n3()
            u'"\'\'\'"'

            >>> Literal('"""').n3()
            u'"\\"\\"\\""'

        Language::

            >>> Literal("hello", lang="en").n3()
            u'"hello"@en'

        Datatypes::

            >>> Literal(1).n3()
            u'"1"^^<http://www.w3.org/2001/XMLSchema#integer>'

            >>> Literal(1.0).n3()
            u'"1.0"^^<http://www.w3.org/2001/XMLSchema#double>'

            >>> Literal(True).n3()
            u'"true"^^<http://www.w3.org/2001/XMLSchema#boolean>'

        Datatype and language isn't allowed (datatype takes precedence)::

            >>> Literal(1, lang="en").n3()
            u'"1"^^<http://www.w3.org/2001/XMLSchema#integer>'

        Custom datatype::

            >>> footype = URIRef("http://example.org/ns#foo")
            >>> Literal("1", datatype=footype).n3()
            u'"1"^^<http://example.org/ns#foo>'

        Passing a namespace-manager will use it to abbreviate datatype URIs:

            >>> from rdflib import Graph
            >>> Literal(1).n3(Graph().namespace_manager)
            u'"1"^^xsd:integer'
        )Úqname_callback)Ú_literal_n3r‘   r’   s     r3   r”   z
Literal.n3”  s:   € ðj ð 	&Ø×#Ò#Ð3DÔ3QÐ#ÑRÔRÐRà×#Ò#Ñ%Ô%Ð%r5   Fc                 ó:  — |�r| j         t          v �r| j        ��| j         t          v ru	 t	          | ¦  «        }t          j        |¦  «        st          j        |¦  «        r|                      d|¦  «        S n&# t          $ r |                      d|¦  «        cY S w xY w| j         t          k    r!t          dddt	          | ¦  «        z  ¦  «        S | j         t          k    rd| z  }d|vrd|vr	d|vr|d	z  }|S | j         t          k    rd| z                       ¦   «         S d| z  S |                      ¦   «         }| j         }d}|r½|r ||¦  «        }|sd
|z  }|t          v r 	 t	          | ¦  «        }t          j        |¦  «        r*|                     dd¦  «                             dd¦  «        }t          j        |¦  «        r|                     dd¦  «        }n'# t          $ r t#          j        d| z  ¦  «         Y nw xY w| j        }|r|›d|›�S |r|›d|›�S d|z  S )aj  
        Using plain literal (shorthand) output::
            >>> from rdflib.namespace import XSD

            >>> Literal(1)._literal_n3(use_plain=True)
            u'1'

            >>> Literal(1.0)._literal_n3(use_plain=True)
            u'1e+00'

            >>> Literal(1.0, datatype=XSD.decimal)._literal_n3(use_plain=True)
            u'1.0'

            >>> Literal(1.0, datatype=XSD.float)._literal_n3(use_plain=True)
            u'"1.0"^^<http://www.w3.org/2001/XMLSchema#float>'

            >>> Literal("foo", datatype=XSD.string)._literal_n3(
            ...         use_plain=True)
            u'"foo"^^<http://www.w3.org/2001/XMLSchema#string>'

            >>> Literal(True)._literal_n3(use_plain=True)
            u'true'

            >>> Literal(False)._literal_n3(use_plain=True)
            u'false'

            >>> Literal(1.91)._literal_n3(use_plain=True)
            u'1.91e+00'

            Only limited precision available for floats:
            >>> Literal(0.123456789)._literal_n3(use_plain=True)
            u'1.234568e-01'

            >>> Literal('0.123456789',
            ...     datatype=XSD.decimal)._literal_n3(use_plain=True)
            u'0.123456789'

        Using callback for datatype QNames::

            >>> Literal(1)._literal_n3(
            ...         qname_callback=lambda uri: "xsd:integer")
            u'"1"^^xsd:integer'

        NFz\.?0*eÚez%er¯   r  ÚEz.0r�   ÚinfÚINFÚInfinityÚnanÚNaNzSerializing weird numerical %rú@z^^)rí   Ú_PLAIN_LITERAL_TYPESrE   Ú_NUMERIC_INF_NAN_LITERAL_TYPESr  ÚmathÚisinfÚisnanrC  ró   Ú_XSD_DOUBLEr   r  r?  r/  Ú_quote_encodeÚreplaceÚwarningsÚwarnrô   )	rY   Ú	use_plainrB  Úvr  Úencodedrí   Ú	quoted_dtrô   s	            r3   rC  zLiteral._literal_n3Î  s   € ðZ ñ 	'˜œÕ*>Ð>Ñ>ØŒzÑ%ð ”=Õ$BÐBÐBðGÝ! $™KœK˜Ýœ: a™=œ=ð K­D¬J°q©M¬Mð KØ#'×#3Ò#3°E¸>Ñ#JÔ#JÐJðKøå%ð Gð Gð GØ#×/Ò/°°~ÑFÔFÐFÐFÐFðGøøøð ”=¥KÒ/Ð/Ý˜y¨#¨tµe¸D±k´kÑ/AÑBÔBÐBØ”]¥lÒ2Ð2Ø˜t™�AØ !�|�|¨°1¨¨¸ÀA¸¸Ø˜T™	˜Ø�HØ”]¥lÒ2Ð2Ø  4™K×.Ò.Ñ0Ô0Ð0à $™;Ð&à×$Ò$Ñ&Ô&ˆà”=ˆØˆ	Øð 	KØð 5Ø*˜N¨8Ñ4Ô4�	Øð .Ø" XÑ-�	ØÕ9Ð9Ð9ðKÝ˜d™œ�AÝ”z !‘}”}ð ð #*§/¢/°%¸Ñ"?Ô"?×"GÒ"GØ&¨ñ#ô #˜õ ”z !‘}”}ð @Ø")§/¢/°%¸Ñ"?Ô"?˜øøÝ!ð Kð Kð Kõ ”MÐ"BÀTÑ"IÑJÔJÐJÐJÐJðKøøøð
 ”=ˆØð 	"Ø%˜g˜g x xÐ0Ð0Øð 	"Ø&˜w˜w¨	¨	Ð2Ð2à˜'‘>Ð!s%   ªAA8 Á8 BÂBÅ A7G Ç!G<Ç;G<c                 ó–  — d| v rq|                       dd¦  «        }d| v r|                      dd¦  «        }|d         dk    r|d         dk    r|d d…         dz   dz   }d	|                      d
d¦  «        z  S d|                       dd¦  «                              dd¦  «                              dd¦  «                              d
d¦  «        z  S )Nú
ú\z\\z"""z\"\"\"éÿÿÿÿú"éþÿÿÿz"""%s"""úz\rz"%s"z\nz\")rT  )rY   rY  s     r3   rS  zLiteral._quote_encode7  sÚ   € ð �4ˆ<ˆ<à—l’l 4¨Ñ0Ô0ˆGØ˜ˆ}ˆ}à!Ÿ/š/¨%°Ñ=Ô=�Ø�rŒ{˜cÒ!Ð! g¨b¤k°TÒ&9Ð&9Ø! # 2 #œ,¨Ñ-°Ñ3�à §¢°°eÑ <Ô <Ñ<Ð<à˜DŸLšL¨¨uÑ5Ô5×=Ò=¸dÀFÑKÔK×SÒSØ�Uñô çŠg�d˜EÑ"Ô"ñ#ð #r5   c                 óŒ  •— t          t          | ¦  «                             ¦   «         g}| j        �*|                     dt          | j        ¦  «        z  ¦  «         | j        �*|                     dt          | j        ¦  «        z  ¦  «         | j        t          k    rd}n| j        j        }|›dd 	                    |¦  «        ›d�S )Nzlang=%szdatatype=%szrdflib.term.LiteralrŸ   z, r    )
r¢   r	   r£   rô   Úappendr  rí   r¡   rK   Újoin)rY   Úargsr¥   r¡   s      €r3   r£   zLiteral.__repr__P  s®   ø€ Ý•g˜tÑ$Ô$×-Ò-Ñ/Ô/Ð0ˆØŒ=Ð$Ø�KŠK˜	¥D¨¬Ñ$7Ô$7Ñ7Ñ8Ô8Ð8ØŒ=Ð$Ø�KŠK˜­¨T¬]Ñ(;Ô(;Ñ;Ñ<Ô<Ð<ØŒ>�WÒ$Ð$Ø+ˆGˆGà”nÔ-ˆGØ&˜w˜w¨¯	ª	°$©¬¨¨Ð8Ð8r5   c                 ó"   — | j         �| j         S | S )zV
        Returns an appropriate python datatype derived from this RDF Literal
        r°   r‹   s    r3   rŒ   zLiteral.toPython\  s   € ð
 Œ:Ð!Ø”:ÐØˆr5   )NNNr8   )FN)(rK   rL   rM   rN   r"   rº   rO   r%   rC   r9   rR   rî   ÚpropertyrE   rô   rí   rš   r  r	  r¨   r  r}   r  r!  r|   rg   rj   ro   rr   r0  ry   rW   r[   r_   r”   rC  rS  r£   rŒ   r»   r¼   s   @r3   r	   r	   Ã  sŽ  ø€ € € € € € ðQ€Gðf €K€K�Kà4€Ið
 #Ø"&Ø$(ðLð LàðLð �sŒmðLð ˜3”-ð	Lð
 ˜D”>ðLð Lð Lð Lð\ð ð ð& ðð ñ „Xðð ð˜( 3œ-ð ð ð ñ „Xðð ðð ñ „Xðð
ð 
ð 
ðLð Lð Lð'ð 'ð 'ð
4Dð 4Dð 4Dðlð ð ð=ð =ð =ð,=ð =ð =ð(=ð =ð =ð&=ð =ð =ð*]"ð ]"ð ]"ð~ð ð ð"ð "ð "ð"ð "ð "ðð ð ð:$ð $ð $ðL1ð 1ð 1ðfnð nð nð`"ð "ð "ð8&ð 8&ð 8&ð 8&ðtg"ð g"ð g"ð g"ðR#ð #ð #ð2
9ð 
9ð 
9ð 
9ð 
9ðð ð ð ð ð ð r5   r	   c                 ó|   — t           j        j                             d| z  ¦  «        }|                     ¦   «          |S )Nz1<rdflibtoplevelelement>%s</rdflibtoplevelelement>)ÚxmlÚdomÚminidomÚparseStringrî   )Ú	xmlstringr¸   s     r3   Ú	_parseXMLrn  f  s<   € ÝŒWŒ_×(Ò(Ø;¸iÑGñô €Fð ×ÒÑÔÐØ€Mr5   c                 óø   — 	 dd l }|                     |j                             d¦  «        ¬¦  «        }|                     | ¦  «        }|                     ¦   «          |S # t          $ r t          d¦  «        ‚w xY w)Nr   rj  )ÚtreezWHTML5 parser not available. Try installing html5lib <http://code.google.com/p/html5lib>)Úhtml5libÚ
HTMLParserÚtreebuildersÚgetTreeBuilderÚparseFragmentrî   ÚImportError)Úhtmltextrq  Úparserr¸   s       r3   Ú
_parseHTMLry  n  s“   € ð
Øˆˆˆà×$Ò$¨(Ô*?×*NÒ*NÈuÑ*UÔ*UÐ$ÑVÔVˆØ×%Ò% hÑ/Ô/ˆØ×ÒÑÔÐØˆøÝð 
ð 
ð 
Ýð>ñ
ô 
ð 	
ð
øøøs   ‚AA ÁA9c                 ó  — t          | t          j        j        j        ¦  «        r:t          j        j                             ¦   «         }|xj        | j        z  c_        |} |                      d¦  «        }|                     d 	                    d¦  «        ¦  «        r
|dd …         }|                     d 	                    d¦  «        ¦  «        r
|dd…         }|d 	                    d¦  «        k    rd	 	                    d¦  «        }|S )
Nr?   z&<?xml version="1.0" encoding="utf-8"?>zlatin-1é&   z<rdflibtoplevelelement>é   ièÿÿÿz<rdflibtoplevelelement/>rÇ   )
r@   ri  rj  rk  ÚDocumentFragmentÚDocumentÚ
childNodesÚtoxmlru   Úencode)Úxmlnoder  r  s      r3   Ú	_writeXMLrƒ  }  së   € Ý�'�3œ7œ?Ô;Ñ<Ô<ð ÝŒGŒO×$Ò$Ñ&Ô&ˆØ	ˆŒ˜Ô*Ñ*ˆŒØˆØ�Š�gÑÔ€Að 	‡|‚|Ð<×CÒCÀIÑNÔNÑOÔOð ØˆbˆcˆcŒFˆØ‡|‚|Ð-×4Ò4°YÑ?Ô?Ñ@Ô@ð Øˆb�ˆfŒIˆØÐ&×-Ò-¨iÑ8Ô8Ò8Ð8Ø�IŠI�iÑ Ô ˆØ€Hr5   c                 ór   — t          | t          ¦  «        r|                      ¦   «         } t          | ¦  «        S r8   )r@   rC   r�  r   r°   s    r3   Ú
_unhexlifyr…  �  s/   € å�%�ÑÔð Ø—’‘”ˆÝ�UÑÔÐr5   c                 óŽ   — ddg}ddg}|                       ¦   «         }||v rdS ||vrt          j        d| z  t          ¬¦  «         dS )	NÚ1Útruer  ÚfalseTz8Parsing weird boolean, % r does not map to True or False)ÚcategoryF)r/  rU  rV  ÚUserWarning)rE   Útrue_accepted_valuesÚfalse_accepted_valuesÚ	new_values       r3   Ú_parseBooleanr�  –  sk   € Ø ˜=ÐØ  '˜NÐØ—’‘”€IØÐ(Ð(Ð(ØˆtØÐ-Ð-Ð-ÝŒØFÈÑNÝ ð	
ñ 	
ô 	
ð 	
ð ˆ5r5   z!http://www.w3.org/2001/XMLSchema#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#Ú
XMLLiteralÚHTMLÚstringÚnormalizedStringÚtokenr  ÚdoubleÚdecimalÚintegerÚbooleanÚdateTimer   r   ÚdurationÚdayTimeDurationÚyearMonthDurationz&http://www.w3.org/2002/07/owl#rationalÚbase64BinaryÚ	hexBinaryÚgYearÚ
gYearMonthÚbyter  ÚlongÚnegativeIntegerÚnonNegativeIntegerÚnonPositiveIntegerÚpositiveIntegerÚshortÚunsignedByteÚunsignedIntÚunsignedLongÚunsignedShortc                 óP   — | j         d uo| j                              | ¦  «        d u| fS r8   ©ÚtzinfoÚ	utcoffsetr°   s    r3   ú<lambda>r°  ê  s0   € àŒ˜DÐ ÐN U¤\×%;Ò%;¸EÑ%BÔ%BÈ$Ð%NØð€ r5   c                 óP   — | j         d uo| j                              d ¦  «        d u| fS r8   r­  r°   s    r3   r°  r°  ï  s0   € àŒ˜DÐ ÐM U¤\×%;Ò%;¸DÑ%AÔ%AÈÐ%MØð€ r5   c                 ó*   — |                       ¦   «         S r8   )r€  r°   s    r3   r°  r°  ô  s   € ¨E¯KªK©M¬M€ r5   c                 ó4   — |r || ¦  «        |fS |r| |fS | d fS r8   rJ   )ÚobjÚpTypeÚcastFuncÚdTypes       r3   Ú_py2literalr¸    s9   € Øð Øˆx˜‰}Œ}˜eÐ#Ð#Ø	ð Ø�EˆzÐà�DˆyÐr5   c                 óæ   — t           D ]2\  \  }}}t          | |¦  «        r||k    rt          | |||¦  «        c S Œ3t          D ],\  }\  }}t          | |¦  «        rt          | |||¦  «        c S Œ-| dfS )z„
    Casts a tuple of a python type and a special datatype URI to a tuple of the lexical value and a
    datatype URI (or None)
    N)Ú_SpecificPythonToXSDRulesr@   r¸  Ú_GenericPythonToXSDRules)r´  rí   rµ  r·  r¶  s        r3   rö   rö   
  s§   € õ
 %>ð <ð <Ñ ‰ˆ�˜Ý�c˜5Ñ!Ô!ð 	< e¨xÒ&7Ð&7Ý˜s E¨8°UÑ;Ô;Ð;Ð;Ð;øå$<ð <ð <Ñ ˆÑ �˜%Ý�c˜5Ñ!Ô!ð 	<Ý˜s E¨8°UÑ;Ô;Ð;Ð;Ð;ð	<à�ˆ9Ðr5   ræ   c                 óD   — t          | ¦  «                             ¦   «         S r8   )rC   r/  ©Úis    r3   r°  r°  '  s   € •c˜!‘f”f—l’l‘n”n€ r5   c                 ó
   — | d›S )NÚfrJ   r½  s    r3   r°  r°  *  s
   € ˜A˜˜€ r5   c                 ó*   — |                       ¦   «         S r8   ©Ú	isoformatr½  s    r3   r°  r°  +  s   € ˜!Ÿ+š+™-œ-€ r5   c                 ó*   — |                       ¦   «         S r8   rÂ  r½  s    r3   r°  r°  ,  ó   € �a—k’k‘m”m€ r5   c                 ó*   — |                       ¦   «         S r8   rÂ  r½  s    r3   r°  r°  -  rÅ  r5   c                 ó    — t          | ¦  «        S r8   ©r   r½  s    r3   r°  r°  .  s   € Õ,¨QÑ/Ô/€ r5   c                 ó    — t          | ¦  «        S r8   rÈ  r½  s    r3   r°  r°  /  s   € Õ-¨aÑ0Ô0€ r5   c                 óR   — |                       d¦  «                             d¦  «        S )Nz%Yé   ©ÚstrftimeÚzfill©r  s    r3   r°  r°  :  s    €  S§\¢\°$Ñ%7Ô%7×%=Ò%=¸aÑ%@Ô%@€ r5   c                 óR   — |                       d¦  «                             d¦  «        S )Nz%Y-%mé   rÌ  rÏ  s    r3   r°  r°  ;  s    € ¨#¯,ª,°wÑ*?Ô*?×*EÒ*EÀaÑ*HÔ*H€ r5   rô   ÚanyURIc                 óÌ   — t                                |d¦  «        }|r	  || ¦  «        S #  Y dS xY w|€0	 t          | ¦  «        S # t          $ r t          | d¦  «        cY S w xY wdS )z~
    Map a lexical form to the value-space for the given datatype
    :returns: a python object for the value or ``None``
    FNr?   )Ú_toPythonMappingÚgetrC   r†   )Úlexicalrí   ÚconvFuncs      r3   rõ   rõ   m  s•   € õ
  ×#Ò# H¨eÑ4Ô4€HØð ð	Ø�8˜GÑ$Ô$Ð$øð	à�4�4øøøØ	Ð	ð	)Ý�w‘<”<ÐøÝ!ð 	)ð 	)ð 	)Ý�w Ñ(Ô(Ð(Ð(Ð(ð	)øøøð ˆts   Ÿ
* ª/µA ÁA!Á A!c                 ó¬   — t          | t          ¦  «        r>|                      dd¦  «                             dd¦  «                             dd¦  «        S | S )z~
    Replaces 	, 
,  (#x9 (tab), #xA (linefeed), and #xD (carriage return)) with space without any whitespace collapsing
    ú	ú r\  ra  )r@   rC   rT  ©rë   s    r3   rù   rù   „  sU   € õ Ð"¥CÑ(Ô(ð YØ×'Ò'¨¨cÑ2Ô2×:Ò:¸4ÀÑEÔE×MÒMÈdÐTWÑXÔXÐXØÐr5   c                 ó€   — t          | t          ¦  «        r(t          j        dd|                      ¦   «         ¦  «        S | S )Nz +rÚ  )r@   rC   Úrer   ÚstriprÛ  s    r3   rú   rú   �  s<   € ÝÐ"¥CÑ(Ô(ð ;åŒv�d˜CÐ!1×!7Ò!7Ñ!9Ô!9Ñ:Ô:Ð:ØÐr5   Fc                 ó  — |r| €t          d¦  «        ‚| t          v rt                               d| z  ¦  «         |€|}|t          | <   |r t                               || f|f¦  «         dS t                               ||| ff¦  «         dS )a€  
    register a new datatype<->pythontype binding

    :param constructor: an optional function for converting lexical forms
                        into a Python instances, if not given the pythontype
                        is used directly

    :param lexicalizer: an optional function for converting python objects to
                        lexical form, if not given object.__str__ is used

    :param datatype_specific: makes the lexicalizer function be accessible
                              from the pair (pythontype, datatype) if set to True
                              or from the pythontype otherwise.  False by default
    Nz1No datatype given for a datatype-specific bindingz+datatype '%s' was already bound. Rebinding.)r�   rÔ  r„   r…   rº  rc  r»  )rí   Ú
pythontypeÚconstructorÚlexicalizerÚdatatype_specifics        r3   r   r   ”  s¬   € ð" ð M˜XÐ-ÝÐKÑLÔLÐLàÕ#Ð#Ð#Ý�ŠÐDÀxÑOÑPÔPÐPàÐØ ˆØ!,Õ�XÑØð OÝ!×(Ò(¨:°xÐ*@À+Ð)NÑOÔOÐOÐOÐOå ×'Ò'¨°kÀ8Ð5LÐ(MÑNÔNÐNÐNÐNr5   c                   ó@   ‡ — e Zd ZdZdZd„ Zˆ fd„Zd„ Zd	d„Zd„ Z	ˆ xZ
S )
r
   zy
    A Variable - this is used for querying, or in Formula aware
    graphs, where Variables can stored in the graph
    rJ   c                 ó¨   — t          |¦  «        dk    rt          d¦  «        ‚|d         dk    r
|dd …         }t                               | |¦  «        S )Nr   z7Attempted to create variable with empty string as name!ú?r(   )r³   r�   rC   rR   rS   s     r3   rR   zVariable.__new__¼  sN   € Ýˆu‰:Œ:˜Š?ˆ?ÝÐUÑVÔVÐVØ�Œ8�sŠ?ˆ?Ø˜!˜"˜"”IˆEÝ�{Š{˜3 Ñ&Ô&Ð&r5   c                 ó˜   •— | j         t          u rd}n| j         j        }|›dt          t          | ¦  «                             ¦   «         ›d�S )Nzrdflib.term.VariablerŸ   r    )r¡   r
   rK   r¢   r£   r¤   s     €r3   r£   zVariable.__repr__Ã  sL   ø€ ØŒ>�XÐ%Ð%Ø,ˆGˆGà”nÔ-ˆGà&˜w˜w­­h¸Ñ(=Ô(=×(FÒ(FÑ(HÔ(HÐ(HÐ(HÐIÐIr5   c                 ó   — d| z  S ©Nz?%srJ   r‹   s    r3   rŒ   zVariable.toPythonË  ó   € Ø�t‰|Ðr5   Nc                 ó   — d| z  S ré  rJ   r’   s     r3   r”   zVariable.n3Î  rê  r5   c                 ó0   — t           t          | ¦  «        ffS r8   )r
   rC   r‹   s    r3   rš   zVariable.__reduce__Ñ  s   € Ý�3˜t™9œ9˜,Ð'Ð'r5   r8   )rK   rL   rM   rN   rO   rR   r£   rŒ   r”   rš   r»   r¼   s   @r3   r
   r
   ´  s�   ø€ € € € € ðð ð
 €Ið'ð 'ð 'ðJð Jð Jð Jð Jðð ð ðð ð ð ð(ð (ð (ð (ð (ð (ð (r5   r
   re   é
   é   é   é(   c                 ó  ‡ ‡— ddl m} ˆ ˆfd„}‰ �‰€dS ‰ j        ‰j        k    rdS ‰ j        |j        |j        fv r
 |¦   «         S ‰ j        |j        k    ræ‰ j        ‰j        k    r‰ j        ‰j        k    sdS d„ ‰ j         	                    ¦   «         D ¦   «         }d„ ‰j         	                    ¦   «         D ¦   «         }t          |¦  «        t          |¦  «        k    rdS |D ]O}||v rF‰                      |d         |d         ¦  «        ‰                     |d         |d         ¦  «        k    s dS ŒP |¦   «         S ‰ j        |j        |j        |j        |j        fv r‰ j        ‰j        k    S ‰ j        |j        k    r ‰ j        ‰j        k    o‰ j        ‰j        k    S ‰ j        |j        k    r‰ j        ‰j        k    S ‰ j        |j        k    r%‰ j        ‰j        k    o‰ j        ‰j        j        k    S t5          d‰ j        z  ¦  «        ‚)	Nr   )r   c                  óÊ   •— t          ‰j        ¦  «        t          ‰j        ¦  «        k    rdS t          d„ ‰j        ‰j        ¦  «        D ]\  } }t          | |¦  «        s dS ŒdS )NFc                 ó
   — | |fS r8   rJ   )ÚxÚys     r3   r°  z2_isEqualXMLNode.<locals>.recurse.<locals>.<lambda>è  s
   € ¨!¨Q¨€ r5   T)r³   r  Úmapr8  )ÚncÚocÚnoderZ   s     €€r3   Úrecursez _isEqualXMLNode.<locals>.recurseà  sw   ø€ õ ˆtŒÑÔ¥3 uÔ'7Ñ#8Ô#8Ò8Ð8Ø�5ÝÐ/Ð/°´À%ÔBRÑSÔSð 	ð 	‰HˆR�Ý" 2 rÑ*Ô*ð Ø�u�uðð ˆtr5   Fc                 ó*   — g | ]}|d          dk    ¯|‘ŒS ©r   zhttp://www.w3.org/2000/xmlns/rJ   ©Ú.0Úks     r3   ú
<listcomp>z#_isEqualXMLNode.<locals>.<listcomp>  ó2   € ð 
ð 
ð 
àØ�ŒtÐ6Ò6Ð6ð à6Ð6Ð6r5   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS rü  rJ   rý  s     r3   r   z#_isEqualXMLNode.<locals>.<listcomp>  r  r5   r(   z,I dont know how to compare XML Node type: %s)Úxml.dom.minidomr   ÚnodeTypeÚDOCUMENT_NODEÚDOCUMENT_FRAGMENT_NODEÚELEMENT_NODEÚtagNameÚnamespaceURIÚ
attributesÚkeysNSr³   ÚgetAttributeNSÚ	TEXT_NODEÚCOMMENT_NODEÚCDATA_SECTION_NODEÚNOTATION_NODEÚdataÚPROCESSING_INSTRUCTION_NODEÚtargetÚENTITY_NODEÚ	nodeValueÚDOCUMENT_TYPE_NODEÚpublicIdÚsystemIdÚsystemÚIdr�   )rù  rZ   r   rú  Ún_keysÚo_keysrÿ  s   ``     r3   r8  r8  Ý  si  øø€ Ø$Ð$Ð$Ð$Ð$Ð$ðð ð ð ð ð ð €|�u�}Øˆuà„}˜œÒ&Ð&Øˆuà„}˜Ô+¨TÔ-HÐIÐIÐIØˆw‰yŒyÐà	Œ˜$Ô+Ò	+Ð	+ð ŒL˜EœMÒ)Ð)¨dÔ.?À5ÔCUÒ.UÐ.Uà�5ð
ð 
à”_×+Ò+Ñ-Ô-ð
ñ 
ô 
ˆð

ð 
àÔ%×,Ò,Ñ.Ô.ð
ñ 
ô 
ˆõ
 ˆv‰;Œ;�#˜f™+œ+Ò%Ð%Ø�5Øð 	ð 	ˆAà�V��Ø×'Ò'¨¨!¬¨a°¬dÑ3Ô3°u×7KÒ7KÈAÈaÌDÐRSÐTUÔRVÑ7WÔ7WÒWÐWà�u�uð Xð ˆw‰yŒyÐà	ŒØŒØÔØÔØÔð	ð 
ð 
ð Œy˜EœJÒ&Ð&à	Œ˜$Ô:Ò	:Ð	:ØŒy˜EœJÒ&ÐF¨4¬;¸%¼,Ò+FÐFà	Œ˜$Ô*Ò	*Ð	*ØŒ~ ¤Ò0Ð0à	Œ˜$Ô1Ò	1Ð	1ØŒ} ¤Ò.ÐS°4´=ÀEÄLÄOÒ3SÐSõ ÐFÈÌÑVÑWÔWÐWr5   Ú__main__)NNF)†rN   rÝ  Ú	fractionsr   Ú__all__ÚloggingrU  rO  r  ri  r   r   r   r   r   r   Úcollectionsr   Úisodater   r   r   r   r   r   Úbase64r   r   Úbinasciir   r   rð   Úrdflib.compatr   Úurllib.parser   r   r   r–  r    Útypingr!   r"   r#   r$   r%   r&   r'   Úpathsr)   r*   r+   r,   r-   Ú	getLoggerrK   r„   rÀ   r´   r.   rC   rº   r0   r4   r:   r<   rH   Úobjectr   r   r   rµ   r±   rÎ   rÖ   r   r	   rn  ry  rƒ  r…  r�  Ú_XSD_PFXÚ_RDF_PFXr6  r7  r  r÷   rø   Ú
_XSD_FLOATrR  r  Ú_XSD_INTEGERr?  r9  r:  r;  r<  r=  r>  Ú_OWL_RATIONALÚ_XSD_B64BINARYÚ_XSD_HEXBINARYÚ
_XSD_GYEARÚ_XSD_GYEARMONTHr  rM  rN  rj  rk  r~  r%  r  r¸  rö   r  r9   r  r}  r»  rA   rº  r.  rÔ  Úupdaterõ   rù   rú   r   r
   re   r8  ÚdoctestÚtestmodrJ   r5   r3   ú<module>r7     sÕ  ððð ð ð, 
€	€	€	à Ð Ð Ð Ð Ð ðð ð €ð €€€Ø €€€Ø €€€à Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø Ð Ð Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð (Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à €€€Ø #Ð #Ð #Ð #Ð #Ð #à "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Làð QØPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPà	ˆÔ	˜8Ñ	$Ô	$€Ø$€Ø2Ð Ø €ˆˆc�7ˆlÔ	Ð  Ð  Ñ  ð #Ð ðð ð ð �'Ð9Ñ:Ô:€ð,˜3ð ,ð ,ð ,ð ,ðð ð ð$ð ð ð ð ˆ6ñ ô ð ðbð bð bð bð b��sñ bô bð bðJj?ð j?ð j?ð j?ð j?ˆZñ j?ô j?ð j?ðZð ð ð ð ˆFñ ô ð ðð ð ð ð �%ñ ô ð ð(
ð 
ð 
ð	ð 	ð 	ð;7ð ;7ð ;7ð ;7ð ;7ˆJñ ;7ô ;7ð ;7ð|`ð `ð `ð `ð `ˆjñ `ô `ð `ðFð ð ð
ð 
ð 
ðð ð ð$ð ð ðð ð ð /€Ø8€à�&˜ LÑ0Ñ1Ô1€Ø�6˜( VÑ+Ñ,Ô,Ð àˆf�X Ñ(Ñ)Ô)€Ø˜ Ð+=Ñ =Ñ>Ô>Ð ØˆV�H˜wÑ&Ñ'Ô'€
àˆV�H˜wÑ&Ñ'Ô'€
Øˆf�X Ñ(Ñ)Ô)€Øˆv�h Ñ*Ñ+Ô+€Øˆv�h Ñ*Ñ+Ô+€Øˆv�h Ñ*Ñ+Ô+€à��x *Ñ,Ñ-Ô-€ØˆF�8˜fÑ$Ñ%Ô%€	ØˆF�8˜fÑ$Ñ%Ô%€	Ø��x *Ñ,Ñ-Ô-€Ø�v˜hÐ):Ñ:Ñ;Ô;Ð Ø˜ Ð+>Ñ >Ñ?Ô?Ð à�Ð?Ñ@Ô@€Ø�˜ >Ñ1Ñ2Ô2€Ø�˜ ;Ñ.Ñ/Ô/€ØˆV�H˜wÑ&Ñ'Ô'€
Ø�&˜ LÑ0Ñ1Ô1€ð ØØØ
€Fˆ8�gÑÑÔØ
€Fˆ8�fÑÑÔØ
€Fˆ8�eÑÑÔØ
€Fˆ8�fÑÑÔØ
€Fˆ8Ð'Ñ'Ñ(Ô(Ø
€Fˆ8Ð*Ñ*Ñ+Ô+Ø
€Fˆ8Ð*Ñ*Ñ+Ô+Ø
€Fˆ8Ð'Ñ'Ñ(Ô(Ø
€Fˆ8�gÑÑÔØ
€Fˆ8�nÑ$Ñ%Ô%Ø
€Fˆ8�mÑ#Ñ$Ô$Ø
€Fˆ8�nÑ$Ñ%Ô%Ø
€Fˆ8�oÑ%Ñ&Ô&ð!Ð ð* ØØØØðÐ ð €Fˆ8�gÑÑÔØØð"Ð ð ð ð ð
 	ð ð ð
 „G„OÔÐ9Ð9ðÐ ð  ØØØ
€Fˆ8Ð(Ñ(Ñ)Ô)Ø
€Fˆ8�gÑÑÔðÐ ðð ð ðð ð ð6 	ˆ,ÐØ
ˆT�;ÐÐ Ø	Ð$Ð$ lÐ3Ð4Øˆ4�Ð
ÐØ��|Ð$Ð%ØÐ!Ð! <Ð0Ð1ØÐ'Ð'¨Ð7Ð8Ø	Ð#Ð# YÐ/Ð0Ø	Ð#Ð# YÐ/Ð0ØÐ/Ð/°Ð?Ð@ØÐ0Ð0Ð2FÐGÐHØ„W„_Ô 	¨?Ð;Ð<ð
 	„W„_Ô%¨	Ð3CÐ'DÐEØ��mÐ$Ð%ð%Ð ð, ˆJÐÐ@Ð@ÐAØ
ˆOÐÐHÐHÐIØ	ˆ>Ð˜GÐ$Øˆ^Ð˜gÐ&Ø	ˆ>Ð˜IÐ&Øˆ^Ð˜iÐ(ðÐ ð$Øˆ$ð$à
€Fˆ8�fÑÑÔ˜zð$ð €Fˆ8�fÑÑÔ˜zð$ð €Fˆ8�gÑÑÔ 
ð	$ð
 €Fˆ8�lÑ"Ñ#Ô# Zð$ð €Fˆ8�jÑ Ñ!Ô! >ð$ð €Fˆ8�jÑ Ñ!Ô! >ð$ð €Fˆ8Ð'Ñ'Ñ(Ô(¨.ð$ð €Fˆ8Ð)Ñ)Ñ*Ô*¨Nð$ð €Fˆ8�kÑ!Ñ"Ô" Jð$ð €Fˆ8�hÑÑÔ ð$ð €Fˆ8Ð(Ñ(Ñ)Ô)¨4ð$ð €Fˆ8�gÑÑÔ ð$ð €Fˆ8�jÑ Ñ!Ô! 4ð$ð €Fˆ8�iÑÑ Ô  -ð$ð  €Fˆ8�iÑÑ Ô  'ð!$ð" €Fˆ8�iÑÑ Ô  )ð#$ð $ð$ €Fˆ8Ð*Ñ*Ñ+Ô+¨Sð%$ð& €Fˆ8�fÑÑÔ˜yð'$ð( €Fˆ8Ð*Ñ*Ñ+Ô+¨Sð)$ð* €Fˆ8Ð'Ñ'Ñ(Ô(¨#ð+$ð, €Fˆ8�eÑÑÔ˜ið-$ð. €Fˆ8�nÑ$Ñ%Ô% yð/$ð0 €Fˆ8Ð'Ñ'Ñ(Ô(¨#ð1$ð2 €Fˆ8�gÑÑÔ ð3$ð4 €Fˆ8�mÑ#Ñ$Ô$ ið5$ð6 €Fˆ8�fÑÑÔ˜sð7$ð8 €Fˆ8�oÑ%Ñ&Ô&¨ð9$ð: €Fˆ8�nÑ$Ñ%Ô% sð;$ð< €Fˆ8�gÑÑÔ ð=$ð> €Fˆ8�hÑÑÔ ð?$ð@ €Fˆ8�nÑ$Ñ%Ô% yðA$ðB €Fˆ8�hÑÑÔ ðC$ðD �YðE$ð $ðF �jðG$ð $€ðL Ð à × Ò ˜Ñ $Ô $Ð $ðð ð ð.ð ð ðð ð ð QVðOð Oð Oð Oð@(ð (ð (ð (ð (ˆzñ (ô (ð (ðJ $/ ;¨sÑ#3Ô#3€	ˆ4��T”
˜C�Ô Ð 3Ð 3Ñ 3Ø 	× Ò �%˜˜X r¨6°2°wÀÐCÑ DÔ DÐ DðOXð OXð OXðd ˆzÒÐØ€N€N€Nà€G„OÑÔÐÐÐð Ðr5   