o
    ÒmÆiL ã                   @  sò  U d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZ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! dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ g d¢Z,ddl-m.Z. er‡ddl-m/Z/ edƒZ0dydzdd„Z1ede2dZ3d{dd„Z4d|dd„Z5d}d d!„Z6dZ7d"Z8d#Z9d$Z:e8e9e:fZ;e7e8e9e:fZ<dZ=d"Z>d#Z?d%Z@d&ZAd$ZBd'ZCd(ZDeDd) ZEeDd* ZFeDd+ ZGd,ZHd-ZId.ZJeJd/ ZKeDd0 ZLd1ZMeIZNd2ZOe=eNd3 fZPe=eNd4 fZQe=eNd5 fZRe=eNd6 fZSe=eNd7 fZTe=eNd8 fZUdaVd9eWd:< d|d;d<„ZXdaYd|d=d>„ZZd?Z[d@Z\d~dEdF„Z]d~dGdH„Z^eFZ_eGZ`dIZae=eHfZbe=eKfZcdJZde#dK Zee#dL Zfe#dM Zge#dN Zhe#dO ZidZjekdPƒZleldQhB ZmeldRhB Znd-ZoekdSƒZpekdTƒZqekdUƒZrerdVdQhB ZsddYdZ„Zte ud[¡Zve ud\¡ZwdIZxe ud]¡Zye ud^¡Zze ud_¡Z{e ud`¡Z|e ud`¡Z}e uda¡Z~e udb¡Ze udc¡Z€e udd¡Ze ude¡Z‚G dfdg„ dge2ƒZƒG dhdi„ diƒZ„G djdk„ dke…ƒZ†G dldm„ dmƒZ‡e udn¡ZˆG dodp„ dpƒZ‰d€dsdt„ZŠG dudv„ dve.ƒZ‹G dwdx„ dxe‹ƒZŒdS )a€  
notation3.py - Standalone Notation3 Parser
Derived from CWM, the Closed World Machine

Authors of the original suite:

* Dan Connolly <@@>
* Tim Berners-Lee <@@>
* Yosi Scharf <@@>
* Joseph M. Reagle Jr. <reagle@w3.org>
* Rich Salz <rsalz@zolera.com>

http://www.w3.org/2000/10/swap/notation3.py

Copyright 2000-2007, World Wide Web Consortium.
Copyright 2001, MIT.
Copyright 2001, Zolera Systems Inc.

License: W3C Software License
http://www.w3.org/Consortium/Legal/copyright-software

Modified by Sean B. Palmer
Copyright 2007, Sean B. Palmer.

Modified to work with rdflib by Gunnar Aastrand Grimnes
Copyright 2010, Gunnar A. Grimnes

é    )ÚannotationsN)ÚDecimal)ÚIOÚTYPE_CHECKINGÚAnyÚCallableÚDictÚMatchÚMutableSequenceÚNoReturnÚOptionalÚPatternÚSetÚTupleÚTypeVarÚUnion)Úuuid4)Ú	long_type)ÚParserError)ÚDatasetÚGraphÚQuotedGraph)	Ú_XSD_PFXÚBNodeÚIdentifiedNodeÚ
IdentifierÚLiteralÚNodeÚURIRefÚVariableÚ
_unique_id)Ú	BadSyntaxÚN3ParserÚTurtleParserÚ
splitFragPÚjoinÚbaseÚrunNamespaceÚ	uniqueURIÚhexifyÚFormulaÚRDFSinkÚ
SinkParserÚsfloat)ÚParser)ÚInputSourceÚ_AnyTÚurirefÚstrÚpuncÚintÚreturnúTuple[str, str]c                 C  s2   |   d¡}|dkr| d|… | |d… fS | dfS )zÈSplit a URI reference before the fragment

    Punctuation is kept. e.g.

    ```python
    >>> splitFragP("abc#def")
    ('abc', '#def')

    >>> splitFragP("abcdef")
    ('abcdef', '')

    ```
    ú#r   NÚ )Úrfind)r1   r3   Úi© r;   úZ/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/parsers/notation3.pyr$   a   s   
r$   Ú_StrT)ÚboundÚhereÚtherec           
      C  s¾  |  d¡}|  d¡}|dkr|dk s||k r|S |   d¡}|dks'J d|  ƒ‚t|ƒ\}}|s3| | S | |d |d … dkrGtd| |f ƒ‚| |d |d … d	kr\|   d|d ¡}n|d }|dk rlt| ƒ}| d } |d
d… d	kr~| d
|d … | S |d
d… dkrŽ| d
|… | S |  d¡}	 |d
d… dkr¢|dd
… }|dkr©d}n)|d
d… dksµ|dkrÑ|dd
… }|  d||¡}	|	dkrÐ| d
|	d … } |	}nnq”| d
|d … | | S )aÉ  join an absolute URI and URI reference
    (non-ascii characters are supported/doctested;
    haven't checked the details of the IRI spec though)

    `here` is assumed to be absolute.
    `there` is URI reference.

    ```python
    >>> join('http://example/x/y/z', '../abc')
    'http://example/x/abc'

    ```

    Raise ValueError if there uses relative path
    syntax but here has no hierarchical path.

    ```python
    >>> join('mid:foo@example', '../foo') # doctest: +NORMALIZE_WHITESPACE
    Traceback (most recent call last):
        raise ValueError(here)
    ValueError: Base <mid:foo@example> has no slash
    after colon - with relative '../foo'.

    >>> join('http://example/x/y/z', '')
    'http://example/x/y/z'

    >>> join('mid:foo@example', '#foo')
    'mid:foo@example#foo'

    ```

    We grok IRIs

    ```python
    >>> len('Andr\xe9')
    5

    >>> join('http://example.org/', '#Andr\xe9')
    'http://example.org/#Andr\xe9'

    ```
    ú/ú:r   zBase uri '%s' is not absoluteé   é   z8Base <%s> has no slash after colon - with relative '%s'.é   z//Nz./Ú.r8   z../z..)Úfindr$   Ú
ValueErrorÚlenr9   )
r?   r@   ZslashlZcolonlZbcolonlÚpathÚfragÚbpathZslashrr:   r;   r;   r<   r%   z   sV   
/


ÿÿÿ
€ôr%   c                   C  s   dt t ¡ ƒ d S )a  The base URI for this process - the Web equiv of cwd

    Relative or absolute unix-standard filenames parsed relative to
    this yield the URI of the file.
    If we had a reliable way of getting a computer name,
    we should put it in the hostname just to prevent ambiguity
    zfile://rA   )Ú	_fixslashÚosÚgetcwdr;   r;   r;   r<   r&   å   s   	r&   Úsc                 C  s4   |   dd¡} | d dkr| d dkr| dd… } | S )z7Fix windowslike filename to unixlike - (#ifdef WINDOWS)ú\rA   r   rC   rB   rD   N)Úreplace)rP   r;   r;   r<   rM   ñ   s   rM   rC   rD   rE   é   é   é   z#http://www.w3.org/2000/10/swap/log#ÚisÚforSomeÚforAllz/http://www.w3.org/1999/02/22-rdf-syntax-ns#typez+http://www.w3.org/1999/02/22-rdf-syntax-ns#zhttp://www.w3.org/2002/07/owl#ZsameAsZparsesToz$http://www.w3.org/TR/REC-rdf-syntax/z&http://www.w3.org/2000/10/swap/log.n3#ÚfirstÚrestZliÚnilÚListÚEmptyúOptional[str]ÚrunNamespaceValuec                   C  s   t du rttƒ tƒ ƒd a t S )z;Returns a URI suitable as a namespace for run-local objectsNr7   )r_   r%   r&   r    r;   r;   r;   r<   r'   #  s   r'   c                   C  s   t d7 a tƒ d tt ƒ S )zA unique URIrC   Zu_)Únextur'   r2   r;   r;   r;   r<   r(   /  s   r(   Fé2   Úargsr   ÚkargsÚNonec                  O  ó   d S ©Nr;   ©rb   rc   r;   r;   r<   ÚBecauseOfData<  ó   rh   c                  O  re   rf   r;   rg   r;   r;   r<   ÚbecauseSubexpressionA  ri   rj   r7   z*http://www.w3.org/2000/10/swap/log#impliesÚbooleanÚdecimalÚdoubleÚfloatÚintegerz	
 !"#$&'()*,+/;<=>?@[\]^`{|}~rF   rB   ZABCDEFabcdef0123456789z(_~.-!$&'()*+,;=/?#@%)z0123456789-ú+Úmr	   c                 C  s8   zt t|  d¡dƒƒW S  ty   td|  d¡ ƒ‚w )NrC   é   zInvalid unicode code point: )Úchrr4   ÚgroupÚ	Exception)rq   r;   r;   r<   ÚunicodeExpandj  s
   ÿrv   z\\u([0-9a-fA-F]{4})z\\U([0-9a-fA-F]{8})z[ \t]*(#[^\n]*)?\r?\nz[ \t]*(#[^\n]*)?$z[ \t]*z[-+]?[0-9]+z[-+]?[0-9]*\.[0-9]+z9[-+]?(?:[0-9]+\.[0-9]*|\.[0-9]+|[0-9]+)(?:e|E)[-+]?[0-9]+z[0-9]+z[\\\r\n\"\']z[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*c                   @  s   e Zd ZdZdS )r-   z4don't normalize raw XSD.double string representationN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r;   r;   r;   r<   r-   ˆ  s    r-   c                   @  sÆ  e Zd Z						dŽddd„Zddd„Zd‘dd„Zd’dd„Zd“d d!„Zd”d$d%„Zd•d(d)„Z	d–d—d,d-„Z
d˜d.d/„Zd™d0d1„Zd™d2d3„Zdšd7d8„Zd›d;d<„Zdœd=d>„Zd‘d?d@„ZdœdAdB„Zd™dCdD„ZddGdH„ZddIdJ„ZddKdL„ZdždMdN„ZdŸd dPdQ„ZddRdS„Zd¡dUdV„Z	dŸd¢dYdZ„Zd£d]d^„Zd¤dbdc„Zdddde„Zd™dfdg„Zddhdi„Z d™djdk„Z!d™dldm„Z"ddndo„Z#d¥dqdr„Z$ddsdt„Z%ddudv„Z&d¦dydz„Z'd§d}d~„Z(d¨d„d…„Z)d©d†d‡„Z*d©dˆd‰„Z+dªdŒd„Z,dS )«r,   Nr8   FÚstorer+   ÚopenFormulaúOptional[Formula]ÚthisDocr2   ÚbaseURIr^   Ú	genPrefixÚwhyúOptional[Callable[[], None]]ÚturtleÚboolc                 C  s\  i | _ |dkrd|v sJ d| ƒ‚|d | j d< || _|r"| |¡ || _d| _d| _|| _g d¢| _d| _i | _	i | _
i | _|| _|| _|rIdnd| _d	| _tr\t| |¡| jd
| _|  |rd|| _n	|rj|| _nd	| _| jrwd| jv swJ ‚| jsˆ| jr„| jd | _ntƒ | _|  |d	u r¢|s¢| jrœ| |d ¡| _n	| ¡ | _n|| _| j| _d	| _d	S )zdnote: namespace names should *not* end in  # ;
        the  # will get added during qname processingr8   rB   zDocument URI not absolute: <%s>r7   r   )ÚaÚthisÚbindÚhasrV   ÚofÚtrueÚfalse)ú"ú')rŒ   N)Zbecausez#_gz	#_formula)Ú	_bindingsÚ_storeZsetGenPrefixÚ_thisDocÚlinesÚstartOfLineÚ
_genPrefixÚkeywordsÚkeywordsSetÚ_anonymousNodesÚ
_variablesÚ_parentVariablesZ_reasonrƒ   Ústring_delimitersÚ_reason2Útrackingrh   Ú	newSymbolÚ_baseURIr(   Ú
newFormulaÚ_formulaÚ_contextÚ_parentContext)Úselfr{   r|   r~   r   r€   r   rƒ   r;   r;   r<   Ú__init__  sV   

ÿ
zSinkParser.__init__r:   r4   r5   c                 C  s   d| j | j|| j d f S )a)  String generated from position in file

        This is for repeatability when referring people to bnodes in a document.
        This has diagnostic uses less formally, as it should point one to which
        bnode the arbitrary identifier actually is. It gives the
        line and character number of the '[' charcacter or path character
        which introduced the blank node. The first blank node is boringly
        _L1C1. It used to be used only for tracking, but for tests in general
        it makes the canonical ordering of bnodes repeatable.z	%s_L%iC%irC   )r“   r‘   r’   )r¢   r:   r;   r;   r<   r?   Û  s   zSinkParser.herec                 C  ó   | j S rf   )rŸ   ©r¢   r;   r;   r<   Úformulaè  ó   zSinkParser.formulaÚstreamúUnion[IO[str], IO[bytes]]c                 C  s   |   | ¡ ¡S rf   )ÚloadBufÚread)r¢   r¨   r;   r;   r<   Ú
loadStreamë  ó   zSinkParser.loadStreamÚbufúUnion[str, bytes]c                 C  s   |   ¡  |  |¡ |  ¡ S )z1Parses a buffer and returns its top level formula)ÚstartDocÚfeedÚendDoc)r¢   r®   r;   r;   r<   rª   î  s   
zSinkParser.loadBufÚoctetsrd   c                 C  sœ   t |tƒs!| d¡}t|ƒdkr |d tj d¡kr |dd… }n|}d}|dkrL|  ||¡}|dk r5dS |  ||¡}|dk rF|  ||d¡ |dks)dS dS )a  Feed an octet stream to the parser

        if BadSyntax is raised, the string
        passed in the exception object is the
        remainder after any statements have been parsed.
        So if there is more data to feed to the
        parser, it should be straightforward to recover.úutf-8r   rC   Nzexpected directive or statement)	Ú
isinstancer2   ÚdecoderI   ÚcodecsÚBOM_UTF8Ú	skipSpaceÚdirectiveOrStatementr!   )r¢   r³   rP   r:   Újr;   r;   r<   r±   õ  s   
	
 €øzSinkParser.feedÚargstrÚhc                 C  sz   |   ||¡}|dk r|S | jr|  ||¡}|dkr|S |  ||¡}|dkr+|  ||¡S |  ||¡}|dkr;|  ||¡S |S ©Nr   )r¹   rƒ   ÚsparqlDirectiveÚ	directiveÚcheckDotÚ	statement)r¢   r¼   r½   r:   r»   r;   r;   r<   rº     s   zSinkParser.directiveOrStatementÚtokÚcolonc                 C  st   |d t vsJ ‚|| dkr|d7 }n|| jvrdS |t|ƒ }|||… |kr.|| tv s6|r8|| dkr8|S dS )zóCheck for keyword.  Space must have been stripped on entry and
        we must not be at end of file.

        if colon, then keyword followed by colon is ok
        (`@prefix:<blah>` is ok, rdf:type shortcut a must be followed by ws)
        r   ú@rC   éÿÿÿÿrB   )Ú_notNameCharsr”   rI   Ú_notKeywordsChars)r¢   rÃ   r¼   r:   rÄ   Zi_plus_len_tokr;   r;   r<   rÃ   (  s   

ÿzSinkParser.tokc                 C  sT   |d t vsJ ‚t|ƒ}|||| …  ¡ | ¡ kr(|||  tv r(||7 }|S dS )z¤Check for SPARQL keyword.  Space must have been stripped on entry
        and we must not be at end of file.
        Case insensitive and not preceded by @
        r   rÆ   )rÇ   rI   ÚlowerÚ_notQNameChars)r¢   rÃ   r¼   r:   Zlen_tokr;   r;   r<   Ú	sparqlTokA  s   zSinkParser.sparqlTokc                 C  s  |   ||¡}|dk r|S g }|  d||¡}|dkr |  ||d¡ |  d||¡}|dkrT| jr5|  ||d¡ |  |||| j¡}|dk rI|  ||d¡ |  |d d … ¡ |S |  d||¡}|dkr—| jri|  ||d¡ |  |||| j¡}|dk r}|  ||d	¡ |D ]}|| jvs‹|| j	v r”| j
 |¡| j|< q|S |  d
||¡}|dkrÍ| jr¬|  ||d¡ |  |||| j¡}|dk rÀ|  ||d¡ |D ]}| j
 |¡ qÂ|S | jd||dd}|dkrBg }|  |||¡}|dk rï|  ||d¡ |  |||¡}|dk r|  ||d¡ |  |d ¡}| jrt| j|ƒ}nd|vr$|  ||d|› d¡ d|v s+J ‚|| j|d d < |  |d d t|ƒ¡ |S |  d||¡}|dkrŒg }|  |||¡}|dk rc|  ||d¡ |  |d ¡}| jrut| j|ƒ}n|  ||d| d ¡ d|v s‡J ‚|| _|S dS )Nr   r‡   z%keyword bind is obsolete: use @prefixr”   z%Found 'keywords' when in Turtle mode.z/'@keywords' needs comma separated list of wordsrX   z#Found 'forAll' when in Turtle mode.zBad variable list after @forAllrW   z$Found 'forSome' when in Turtle mode.z Bad variable list after @forSomeÚprefixT)rÄ   úexpected qname after @prefixú'expected <uriref> after @prefix _qname_rC   rB   ú6With no base URI, cannot use relative URI in @prefix <ú>r&   úexpected <uri> after @base ú>With no previous base URI, cannot use relative URI in @base  <rÆ   )r¹   rÃ   r!   rƒ   ÚcommaSeparatedListÚbareWordÚsetKeywordsÚuri_ref2r—   r˜   r    ÚnewUniversalÚdeclareExistentialÚqnameÚuriOfr   r%   rŽ   r‡   r)   )r¢   r¼   r:   r»   ÚresÚxÚtÚnsr;   r;   r<   rÀ   R  s¨   ÿ€



ý

þýýzSinkParser.directivec                 C  s„  |   ||¡}|dk r|S |  d||¡}|dkrzg }|  |||¡}|dk r+|  ||d¡ |  |||¡}|dk r=|  ||d¡ |  |d ¡}| jrNt| j|ƒ}nd|vr]|  ||d| d ¡ d|v scJ ‚|| j|d d < |  	|d d t
|ƒ¡ |S |  d	||¡}|dkrÀg }|  |||¡}|dk r™|  ||d
¡ |  |d ¡}| jrªt| j|ƒ}n|  ||d| d ¡ d|v s»J ‚|| _|S dS )za
        turtle and trig support BASE/PREFIX without @ and without
        terminating .
        r   ÚPREFIXrÍ   rÎ   rC   rB   rÏ   rÐ   ZBASErÑ   rÒ   rÆ   )r¹   rË   rÙ   r!   rÖ   rÚ   r   r%   rŽ   r‡   r)   )r¢   r¼   r:   r»   rÝ   rÞ   r;   r;   r<   r¿   ¶  sf   þýýþýýzSinkParser.sparqlDirectiveÚqnÚuriÚbytesc                 C  s<   t |tƒs	J dƒ‚|dkr| j |¡ d S | j ||¡ d S )Nz&Any unicode must be %x-encoded alreadyr8   )rµ   râ   r   ÚsetDefaultNamespacer‡   )r¢   rà   rá   r;   r;   r<   r‡   ô  s   zSinkParser.bindÚkúOptional[typing.List[str]]c                 C  s"   |du r	d| _ dS || _d| _ dS )zTakes a list of stringsNr   rC   )r•   r”   )r¢   rä   r;   r;   r<   rÕ   û  s   

zSinkParser.setKeywordsc                 C  s   | j  | j¡ d S rf   )r   r°   rŸ   r¥   r;   r;   r<   r°     s   zSinkParser.startDocc                 C  s   | j  | j¡ | jS )z8Signal end of document and stop parsing. returns formula)r   r²   rŸ   r¥   r;   r;   r<   r²     s   zSinkParser.endDocc                 C  s   | j j|| jd d S ©N©r   )r   ÚmakeStatementrš   )r¢   Ú	quadrupler;   r;   r<   rè     s   zSinkParser.makeStatementc                 C  sJ   g }|   |||¡}|dk r|S |  |||d ¡}|dk r#|  ||d¡ |S )Nr   zexpected propertylist)ÚobjectÚproperty_listr!   )r¢   r¼   r:   Úrr»   r;   r;   r<   rÂ     s   zSinkParser.statementrÛ   úMutableSequence[Any]c                 C  ó   |   |||¡S rf   ©Úitem©r¢   r¼   r:   rÛ   r;   r;   r<   Úsubject  r­   zSinkParser.subjectc                 C  s¼  |   ||¡}|dk r|S g }|  d||¡}|dkr@| jr#|  ||d¡ |  |||¡}|dk r5|  ||d¡ | d|d f¡ |S |  d||¡}|dkr—| jrU|  ||d¡ |  |||¡}|dk rg|  ||d¡ |   ||¡}|dk rx|  ||d	¡ |}|  d
||¡}|dk rŒ|  ||d¡ | d|d f¡ |S |  d||¡}|dkr«| dtf¡ |S |||d … dkrÐ| jr¿|  ||d¡ | d| j t	d ¡f¡ |d S || dkr| jrá|  ||d¡ ||d  dkrú| d| j t	d ¡f¡ |d S | dt
f¡ |d S |||d … dkr(| jr|  ||d¡ | dt	d f¡ |d S |  |||¡}|dkr?| d|d f¡ |S |||d … dksU|||d … dkr\|  ||d¡ dS )z{has _prop_
        is _prop_ of
        a
        =
        _prop_
        >- prop ->
        <- prop -<
        _operator_r   rˆ   z"Found 'has' keyword in Turtle modezexpected property after 'has'ú->rV   z!Found 'is' keyword in Turtle modezexpected <property> after 'is'z/End of file found, expected property after 'is'r‰   zexpected 'of' after 'is' <prop>z<-r…   rD   z<=zFound '<=' in Turtle mode. Zimpliesú=zFound '=' in Turtle moderC   rÐ   z:=zFound ':=' in Turtle modeZbecomesz>-z>- ... -> syntax is obsolete.rÆ   )r¹   rÃ   rƒ   r!   ÚpropÚappendÚRDF_typer   rœ   ÚLogic_NSÚDAML_sameAs)r¢   r¼   r:   rÛ   r»   rì   r;   r;   r<   Úverb   sx   
ÿ
,zSinkParser.verbc                 C  rî   rf   rï   rñ   r;   r;   r<   rõ   v  r­   zSinkParser.propc                 C  rî   rf   )rJ   rñ   r;   r;   r<   rð   y  r­   zSinkParser.itemr   c                 C  s   | j j| j|| jdS ræ   )r   ÚnewBlankNoder    rš   )r¢   rá   r;   r;   r<   Ú	blankNode|  s   zSinkParser.blankNodec           	      C  sÄ   |   |||¡}|dk r|S || dv r`|| }| ¡ }| j|  |¡d}|  ||d |¡}|dk r8|  ||d¡ | ¡ }|dkrK|  | j|||f¡ n
|  | j|||f¡ | |¡ || dv s|S )zParse the path production.r   >   ú^ú!©rá   rC   z"EOF found in middle of path syntaxrý   )	ÚnodeOrLiteralÚpoprü   r?   Únoder!   rè   r    rö   )	r¢   r¼   r:   rÛ   r»   ÚchÚsubjÚobjÚpredr;   r;   r<   rJ     s"   
ôzSinkParser.pathÚlnc                 C  s<   | j  |d¡}|dur|S | jj| j| jd}|| j |< |S )z?Remember or generate a term for one of these _: anonymous nodesNrç   )r–   Úgetr   rû   r    rš   )r¢   r  Útermr;   r;   r<   ÚanonymousNode”  s   
zSinkParser.anonymousNodeÚsubjectAlreadyúOptional[Node]c                 C  s.  |}|   ||¡}|dk r|S |}|| }|dkrÐ|  |¡}|   ||d ¡}|dk r0|  ||d¡ || dkr| jr@|  ||d¡ |d }g }	|  |||	¡}|dkr†|	d }t|	ƒdkrj|	D ]}
|  | jt||
f¡ q]|   ||¡}|dk r{|  ||d¡ || dkr…|d7 }n|  ||d	¡ |d
u r—| j	|d}|  
|||¡}|dk r©|  ||d¡ |   ||¡}|dk rº|  ||d¡ || dkrÇ|  ||d¡ | |¡ |d S | jsÛ|dkrÛ||d  }|dkrZ|d7 }|d }g }d}	 |   ||¡}|dk r|  ||d¡ |||d … dkr|d }n:|s*|| dkr"|d7 }n
|  ||d¡ nd}g }|  |||¡}|dk rA|  ||d¡ | | j |d ¡¡ qñ| | j || j¡¡ |S |d }| j}| j| _| j}| j}| j| _i | _| j ¡ | _| j}t| _|d
u rˆ| j ¡ }|| _	 |   ||¡}|dk rž|  ||d¡ || dkrª|d }n|  ||¡}|dk r¼|  ||d¡ qŒ|| _| j| _|| _| j| _|| _|| _| | ¡ ¡ |S |dkrI| jj}||d  }|dkr÷| jj}|d7 }|d }g }	 |   ||¡}|dk r|  ||d¡ || dkr|d }n"g }|  |||¡}|dk r1|  ||d ¡ | | j |d ¡¡ qþ| ||| jƒ¡ |S |  d!||¡}|dkr\|  ||d"¡ |  d#||¡}|dkro| d¡ |S |  d$||¡}|dkr‚| d¡ |S |d
u r•|  |||¡}|dkr•|S d%S )&z’Parse the <node> production.
        Space is now skipped once at the beginning
        instead of in multiple calls to self.skipSpace().
        r   ú[rC   zEOF after '['rô   z(Found '[=' or '[ =' when in turtle mode.z'EOF when objectList expected after [ = ú;zobjectList expected after [= Nrÿ   zproperty_list expectedz,EOF when ']' expected after [ <propertyList>ú]z']' expectedÚ{ú$Tzneeded '$}', found end.rD   z$}ú,zexpected: ','Fzexpected item in set or '$}'zneeded '}', found end.Ú}zexpected statement or '}'ú(zneeded ')', found end.ú)zexpected item in list or ')'r†   zEKeyword 'this' was ancient N3. Now use @forSome and @forAll keywords.rŠ   r‹   rÆ   )r¹   r?   r!   rƒ   Ú
objectListrI   rè   r    rù   rü   rë   rö   rð   r   ÚinternÚnewSetr¡   r–   r˜   r—   Úcopyrš   rj   rž   rº   ÚcloseÚnewListrÃ   rÖ   )r¢   r¼   r:   rÛ   r  r  r»   r  ZbnodeIDÚobjsr  Zch2r\   Z	first_runrð   ZoldParentContextZparentAnonymousNodesZgrandParentVariablesZreason2Z
thing_typer;   r;   r<   r    s.  
ÿÿ€ÿ




ì



õÿ



ô
ý





zSinkParser.noder  r   c                 C  sl  	 	 |   ||¡}|dk r|  ||d¡ || dkrn|d }q|||d … dkrO| jr3|  ||d¡ |d }g }|  ||||¡}|dk rL|  ||d¡ |}q |}g }|  |||¡}|dkr`|S g }|  |||¡}|dk rt|  ||d	¡ |D ]!}|d \}	}
|	d
kr|  | j|
||f¡ qv|  | j|
||f¡ qv|   ||¡}|dk r©|  ||d¡ || dkr±|S |d7 }q)zUParse property list
        Leaves the terminating punctuation in the buffer
        rC   r   z-EOF found when expected verb in property listr  rD   z:-zFound in ':-' in Turtle modez!bad {} or () or [] node after :- zobjectList expectedró   zEOF found in list of objects)r¹   r!   rƒ   r  rú   r  rè   r    )r¢   r¼   r:   r  r»   rÛ   Úvr  r  ZdiraÚsymr;   r;   r<   rë   a  sT   ÿø
ÕzSinkParser.property_listr»   Úwhatú/Callable[[str, int, MutableSequence[Any]], int]c                 C  s¬   |   ||¡}|dk r|  ||d¡ || dkr|S ||||ƒ}|dk r%dS 	 |   ||¡}|dk r2|S || }|dkrB|dkr@dS |S |||d |ƒ}|dk rU|  ||d¡ q&)zereturn value: -1 bad syntax; >1 new position in argstr
        res has things found appended
        r   z"EOF found expecting comma sep listrF   rÆ   rC   r  zbad list content©r¹   r!   )r¢   r¼   r»   rÛ   r  r:   r  r;   r;   r<   rÓ   ’  s*   
õzSinkParser.commaSeparatedListc                 C  sn   |   |||¡}|dk rdS 	 |  ||¡}|dk r|  ||d¡ || dkr'|S |   ||d |¡}|dk r6|S q)Nr   rÆ   rC   zEOF found after objectr  )rê   r¹   r!   )r¢   r¼   r:   rÛ   r»   r;   r;   r<   r  ²  s   øzSinkParser.objectListc                 C  sZ   |   ||¡}|dk r|S || }|dkr|d S |dkr|S |dkr$|S |  ||d¡ d S )Nr   rF   rC   r  r  z.expected '.' or '}' or ']' at end of statementr!  )r¢   r¼   r:   r»   r  r;   r;   r<   rÁ   À  s   zSinkParser.checkDotc              	   C  sn  g }|   |||¡}|dkri|d \}}|du rJ dƒ‚z| j| }W n2 tyT   |dkr9| |  |¡¡ | Y S | jsI|dkrIt| jpEddƒ}n	|  	||d| ¡ Y nw | j
 || ¡}	| | j |	|	¡¡ |S |  ||¡}|dk rudS || d	kr“g }
|  |||
¡}|dkr‘| |
d ¡ |S dS || d
krü|d }| d|¡}|dkró|||… }t t|¡}t t|¡}| jrÃt| j|ƒ}nd|v sËJ dƒ‚||d  dkrß|dd… dksß|d7 }| j
 |¡}	| | j |	|	¡¡ |d S |  	||d¡ dS | jr5g }
|  |||
¡}|dk rdS |
d | jv r#|  	||d|
d  ¡ | | j
 | jd |
d  ¡¡ |S dS )zøGenerate uri from n3 representation.

        Note that the RDF convention of directly concatenating
        NS and local name is now used though I prefer inserting a '#'
        to make the namesapces look more like what XML folks expect.
        r   Nz	not used?Ú_r8   r7   zPrefix "%s:" not boundrÆ   ú?ú<rC   rÐ   rB   z0With no base URI, cannot deal with relative URIszunterminated URI referencezKeyword "%s" not allowed here.)rÙ   r   Ú
ADDED_HASHrŽ   ÚKeyErrorrö   r
  rƒ   r%   r!   r   rœ   r—   r  r¹   ÚvariablerG   ÚunicodeEscape8Úsubrv   ÚunicodeEscape4r•   rÔ   r”   )r¢   r¼   r:   rÛ   rà   r»   Úpfxr  rÞ   Zsymbr  ÚstZurefr;   r;   r<   rÖ   Í  st   €ù
ÿ 
 zSinkParser.uri_ref2c                 C  s´   z	 || }|dv r|d7 }q|dvr|W S 	 W n
 t y"   Y dS w 	 t ||¡}|du r/n|  jd7  _| ¡  | _}q$t ||¡}|durL| ¡ }t ||¡}|du rX|S dS )zjSkip white space, newlines and comments.
        return -1 if EOF, else position of first non-ws characterT>   ú ú	rC   >   Ú
r7   úrÆ   N)Ú
IndexErrorÚeolÚmatchr‘   Úendr’   ÚwsÚeof)r¢   r¼   r:   r  rq   r;   r;   r<   r¹     s0   ÿûzSinkParser.skipSpacec                 C  s@  |   ||¡}|dk rdS || dkrdS |d7 }|}|| tv r+|  ||d||  ¡ t|ƒ}||k rG|| tvrG|d7 }||k rG|| tvs9| jdu rv| j | jd |||…  ¡}|| j	vrl| j
j|| jd| j	|< | | j	| ¡ |S | j | jd |||…  ¡}|| jvr–| jj|| jd| j|< | | j| ¡ |S )	z?abc -> variable(:abc)r   rÆ   r#  rC   z#Variable name can't start with '%s'Nr7   rç   )r¹   ÚnumberCharsr!   rI   rÈ   r¡   r   rœ   r   r—   r    r×   rš   rö   r˜   )r¢   r¼   r:   rÛ   r»   Ú
len_argstrZvarURIr;   r;   r<   r'  6  s8   ÿ

ÿ
ÿzSinkParser.variablec                 C  s†   |   ||¡}|dk rdS || tv s|| tv rdS |}t|ƒ}||k r8|| tvr8|d7 }||k r8|| tvs*| |||… ¡ |S )zabc -> :abcr   rÆ   rC   )r¹   r7  rÈ   rI   rö   )r¢   r¼   r:   rÛ   r»   r8  r;   r;   r<   rÔ   [  s   ÿzSinkParser.bareWordú3MutableSequence[Union[Identifier, Tuple[str, str]]]c                 C  sn  |   ||¡}|dk rdS || }|tv rdS t|ƒ}|tvrY|}|d7 }z|| tvr5|d7 }|| tvs+W n	 ty?   Y nw ||d  dkrR|d8 }||krRdS |||… }nd}||k r|| dkr|}|dkrpt}	nt}	|d7 }d}
|}d}||k râ|| }|d	kr|
sd
}
||k r˜||||… 7 }|d }n=||	vs£|
rÙ|
r¶|tvrµt| j| j	||d| ƒ‚n |dkrÖ||d  t
vsÊ||d  t
vrÖt| j| j	||d| ƒ‚d}
nn|d7 }||k s€|
rît| j| j	||dƒ‚||d  dkr	t|ƒdkr||krdS |d8 }||k r||||… 7 }| ||f¡ |S |r5| jr5|| jvr5| d|f¡ |S dS )z†
        xyz:def -> ('xyz', 'def')
        If not in keywords and keywordsSet: def -> ('', 'def')
        :def -> ('', 'def')
        r   rÆ   rC   rF   r8   rB   r"  FrQ   Tzillegal escape ú%rD   zillegal hex escape zqname cannot end with \)r¹   ÚnumberCharsPlusrI   rÇ   r1  rÊ   ÚescapeCharsr!   r   r‘   ÚhexCharsrö   r•   r”   )r¢   r¼   r:   rÛ   Úcr8  r»   r  r+  ZallowedCharsZ	lastslashÚstartr;   r;   r<   rÙ   j  s¢   ÿ€ÿ
ûÿûà"ÿ
zSinkParser.qnamec           	      C  sª   |   |||¡}|dkr|S |  ||¡}|dk rdS |}|| }|| jv rS|d }|||d … |kr9|}|d7 }n|}|d7 }|  |||¡\}}| | j |¡¡ |S dS )Nr   rÆ   rE   rC   )rò   r¹   r™   Ústrconströ   r   Ú
newLiteral)	r¢   r¼   r:   rÛ   r»   r  Úch_threeÚdelimrP   r;   r;   r<   rê   Ö  s&   

zSinkParser.objectc                 C  sÞ  |   |||¡}| j}|dkr|S |  ||¡}|dk rdS |}|| }|tv rqt ||¡}|r?| ¡ }| t|||… ƒ¡ |S t	 ||¡}|rX| ¡ }| t
|||… ƒ¡ |S t ||¡}|rq| ¡ }| t|||… ƒ¡ |S |d }|| jv rí|||d … |kr‹|}	|d7 }n|}	|d7 }d }
|  |||	¡\}}d }|| dkrÇt ||d ¡}|d u r¹t| j|||dƒ‚| ¡ }||d |… }|}|||d … dkràg }|  ||d |¡}|d }
| | j ||
|¡¡ |S dS )	Nr   rÆ   rE   rC   rÅ   z3Bad language code syntax on string literal, after @rD   z^^)r  r‘   r¹   r;  Úexponent_syntaxr3  r4  rö   r-   Údecimal_syntaxr   Úinteger_syntaxr   r™   r@  Úlangcoder!   r   rÖ   r   rA  )r¢   r¼   r:   rÛ   r»   Ú	startliner  rq   rB  rC  ÚdtrP   ÚlangZres2r;   r;   r<   r   ÷  sn   

ûzSinkParser.nodeOrLiteralr  ú"Union[Identifier, Tuple[str, str]]c                 C  s   t |tƒr	|d S |S )NrC   )rµ   Útuple)r¢   r  r;   r;   r<   rÚ   ;  s   
zSinkParser.uriOfrC  úTuple[int, str]c                 C  s  |d }|d |d |d |d f\}}}}|}	d}
| j }t|ƒ}|	|k r†||	 |krƒ||kr8|	d }||
fS ||krƒ||	|	d … |krR|	d }|
|7 }
||
fS ||	|	d … |krh|	d }|
|7 }
||
fS ||	|	d … |krz|	d }||
fS |	d7 }	|
|7 }
q!t ||	¡}|sŸJ d||	d	 |	… ||	|	d	 … f ƒ‚| ¡ }z
|
||	|… 7 }
W n1 tyÞ   d}||	|… D ]
}|d
t|ƒ  }q¼t ¡ d  	¡ }t
| j|||	dd||f  ƒ‚w || }||krê|}	q!|dv rû||krû|
|7 }
|d }	q!|dv r!||krt
| j|||dƒ‚|  j d7  _ |
|7 }
|d }	|	| _na|dkr‚|d }	||	 }|s:t
| j|||dƒ‚d |¡}|dkrQd| }|
|7 }
|	d7 }	n1|dkrf|  ||	d |¡\}	}|
|7 }
n|dkr{|  ||	d |¡\}	}|
|7 }
n|  
||d¡ |	|k s&|  
||d¡ dS )zRparse an N3 string constant delimited by delim.
        return index, val
        r   rD   rE   é   é   r8   rC   z&Quote expected in string at ^ in %s^%sé   z %02xz"Unicode error appending charactersz %s to string, because
	%s>   r   rŒ   >   r/  r0  znewline found in string literalrQ   zunterminated string literal (2)z
abfrtvn\"'z
	
\"'ÚuÚUz
bad escapezunterminated string literalN)r‘   rI   ÚinterestingÚsearchr?  ÚUnicodeErrorÚordÚsysÚexc_infoÚ__str__r!   r   r’   rG   ÚuEscapeÚUEscape)r¢   r¼   r:   rC  Zdelim1Zdelim2Zdelim3Zdelim4Zdelim5r»   ÚustrrH  r8  rq   Úerrr>  Zstreasonr  rä   Zuchr;   r;   r<   r@  A  s¾   $
þ
ÿûû

û
û






 bzSinkParser.strconstrH  ÚregúPattern[str]ÚnrÌ   c                 C  s~   t |ƒ|| k rt| j|||dƒ‚z|| | td| |||| …  ¡fW S  ty>   t| j|||d|||| …  ƒ‚w )Nzunterminated string literal(3)rQ   zbad string literal hex escape: )rI   r!   r   r)  rv   ru   )r¢   r¼   r:   rH  r^  r`  rÌ   r;   r;   r<   Ú_unicodeEscape°  s   	ÿ*ûÿzSinkParser._unicodeEscapec                 C  ó   |   |||tdd¡S )NrN  rQ  )ra  r*  ©r¢   r¼   r:   rH  r;   r;   r<   rZ  È  ó   zSinkParser.uEscapec                 C  rb  )Né   rR  )ra  r(  rc  r;   r;   r<   r[  Ë  rd  zSinkParser.UEscapeÚmsgr   c                 C  s   t | j| j|||ƒ‚rf   )r!   r   r‘   )r¢   r¼   r:   rf  r;   r;   r<   r!   Î  rd  zSinkParser.BadSyntax)Nr8   Nr8   NF)r{   r+   r|   r}   r~   r2   r   r^   r€   r2   r   r‚   rƒ   r„   )r:   r4   r5   r2   )r5   r}   )r¨   r©   r5   r}   )r®   r¯   r5   r}   )r³   r¯   r5   rd   )r¼   r2   r½   r4   r5   r4   )F)
rÃ   r2   r¼   r2   r:   r4   rÄ   r„   r5   r4   )rÃ   r2   r¼   r2   r:   r4   r5   r4   )r¼   r2   r:   r4   r5   r4   )rà   r2   rá   râ   r5   rd   )rä   rå   r5   rd   ©r5   rd   )r¼   r2   r:   r4   rÛ   rí   r5   r4   )r¼   r2   rÛ   rí   r5   r4   rf   )rá   r^   r5   r   )r  r2   r5   r   )
r¼   r2   r:   r4   rÛ   rí   r  r  r5   r4   )r¼   r2   r:   r4   r  r   r5   r4   )
r¼   r2   r»   r4   rÛ   rí   r  r   r5   r4   )r¼   r2   r:   r4   rÛ   r9  r5   r4   )r  rK  r5   r2   )r¼   r2   r:   r4   rC  r2   r5   rM  )r¼   r2   r:   r4   rH  r4   r^  r_  r`  r4   rÌ   r2   r5   rM  )r¼   r2   r:   r4   rH  r4   r5   rM  )r¼   r2   r:   r4   rf  r2   r5   r   )-rw   rx   ry   r£   r?   r¦   r¬   rª   r±   rº   rÃ   rË   rÀ   r¿   r‡   rÕ   r°   r²   rè   rÂ   rò   rú   rõ   rð   rü   rJ   r
  r  rë   rÓ   r  rÁ   rÖ   r¹   r'  rÔ   rÙ   rê   r   rÚ   r@  ra  rZ  r[  r!   r;   r;   r;   r<   r,   Œ  sf    ø
N







d
>







V


û 
E
1
 


L

%

l
!
D

o

r,   c                   @  s.   e Zd Zddd	„Zddd„Zeddd„ƒZdS )r!   rá   r2   r‘   r4   r¼   r:   r   c                 C  s(   |  d¡| _|| _|| _|| _|| _d S ©Nr´   )ÚencodeÚ_strÚ_iÚ_whyr‘   Ú_uri)r¢   rá   r‘   r¼   r:   r   r;   r;   r<   r£   ×  s
   
zBadSyntax.__init__r5   c              
   C  sx   | j }| j}d}|dkrd}|d }nd}t|ƒ| dkr d}nd}d| jd | j| j||||… |||d … |f S )Nr   é<   z...r8   z8at line %i of <%s>:
Bad syntax (%s) at ^ in:
"%s%s^%s%s"rC   )rj  rk  rI   r‘   rm  rl  )r¢   r¼   r:   r,  ÚpreÚpostr;   r;   r<   rY  Þ  s&   

ùzBadSyntax.__str__c                 C  s   t | ƒS rf   )r2   r¥   r;   r;   r<   Úmessage÷  s   zBadSyntax.messageN)
rá   r2   r‘   r4   r¼   r2   r:   r4   r   r2   ©r5   r2   )rw   rx   ry   r£   rY  Úpropertyrq  r;   r;   r;   r<   r!   Ö  s
    

r!   c                   @  s\   e Zd ZdZddd„Zddd	„Zd dd„Z	d!d"dd„Zd#d$dd„Zd%dd„Z	d&dd„Z
dS )'r*   r   Úparentr   c                 C  sJ   t ƒ j| _d| _t jd7  _tj| _i | _i | _t|j	|  
¡ d| _d S )Nr   rC   )r{   Ú
identifier)r   ÚhexÚuuidÚcounterr*   ÚnumberÚexistentialsZ
universalsr   r{   ÚidÚquotedgraph)r¢   rt  r;   r;   r<   r£      s   
zFormula.__init__r5   r2   c                 C  s
   d| j  S ©Nz_:Formula%s)ry  r¥   r;   r;   r<   rY  
  ó   
zFormula.__str__r   c                 C  s   t d| j ƒS r}  )r   ry  r¥   r;   r;   r<   r{    r­   z
Formula.idNrá   r^   r   úOptional[Any]c                 C  sL   |d u r|  j d7  _ td| j| j f ƒ}|S t| d¡ ¡  dd¡ƒ}|S )NrC   zf%sb%sr7   r"  Úb)rx  r   rw  Úsplitr  rR   )r¢   rá   r   Úbnr;   r;   r<   rû     s   ÿzFormula.newBlankNoder   c                 C  s   t | d¡ ¡ ƒS )Nr7   )r   r  r  )r¢   rá   r   r;   r;   r<   r×     ó   zFormula.newUniversalrÜ   rd   c                 C  s   |   ¡ | j|< d S rf   )rû   rz  )r¢   rÜ   r;   r;   r<   rØ     rƒ  zFormula.declareExistentialr   c                 C  r¤   rf   )r|  r¥   r;   r;   r<   r     r§   zFormula.close)rt  r   rr  )r5   r   )NN)rá   r^   r   r  r5   r   rf   )rá   r2   r   r  r5   r   )rÜ   r2   r5   rd   )r5   r   )rw   rx   ry   ry  r£   rY  r{  rû   r×   rØ   r  r;   r;   r;   r<   r*   ý  s    



ÿ

r*   z([\x80-\xff])c                   @  s®   e Zd ZdEdd„ZdFdd„ZdGdd„ZdHdd„Z			dIdJdd„ZdKd!d"„ZdLd(d)„Z	dMd,d-„Z
dNd/d0„Z	dOdPd5d6„ZdQd9d:„ZdRd<d=„ZdSd>d?„ZdTdAdB„ZdTdCdD„ZdS )Ur+   Úgraphr   c                 C  s    d | _ tƒ j| _d| _|| _d S r¾   )ÚrootFormular   rv  rw  rx  r„  )r¢   r„  r;   r;   r<   r£   (  s   

zRDFSink.__init__r5   r*   c                 C  s*   t | jjddƒ}|stdƒ‚t| jƒ}|S )NÚformula_awareFz:Cannot create formula parser with non-formula-aware store.)Úgetattrr„  r{   r   r*   )r¢   ÚfaÚfr;   r;   r<   rž   .  s   ÿ
zRDFSink.newFormularu  r   c                 C  s   t | jj|ƒS rf   )r   r„  r{   )r¢   ru  r;   r;   r<   ÚnewGraph7  r­   zRDFSink.newGraphrb   r2   r   c                 G  s   t |d ƒS r¾   )r   ©r¢   rb   r;   r;   r<   rœ   :  s   zRDFSink.newSymbolNÚargú$Optional[Union[Formula, Graph, Any]]rá   r^   r   r‚   r   c                 C  sr   t |tƒr
| |¡S t |tƒs|d u r&|  jd7  _td| j| jf ƒ}|S tt|d ƒ d¡ 	¡  
dd¡ƒ}|S )NrC   zn%sb%sr   r7   r"  r€  )rµ   r*   rû   r   rx  r   rw  r2   r  r  rR   )r¢   rŒ  rá   r   r‚  r;   r;   r<   rû   =  s   

"ÿzRDFSink.newBlankNoderP   rI  úOptional[URIRef]rJ  r   c                 C  s   |rt ||dS t ||dS )N©Údatatype)rJ  )r   )r¢   rP   rI  rJ  r;   r;   r<   rA  L  s   zRDFSink.newLiteralr`  útyping.List[Any]r‰  r}   r   c           
      C  s¤   |   d¡}|s	|S |   d¡}|   d¡}|  |¡ }}|d d… D ]}|  ||||f¡ |  |¡}	|  ||||	f¡ |	}q |  ||||d f¡ |  ||||f¡ |S )Nz.http://www.w3.org/1999/02/22-rdf-syntax-ns#nilz0http://www.w3.org/1999/02/22-rdf-syntax-ns#firstz/http://www.w3.org/1999/02/22-rdf-syntax-ns#restrÆ   )rœ   rû   rè   )
r¢   r`  r‰  r[   rY   rZ   Úafr…   ÚneÚanr;   r;   r<   r  R  s   



zRDFSink.newListr0   ú
Set[_AnyT]c                 G  s   t |ƒS rf   )Úsetr‹  r;   r;   r<   r  d  s   zRDFSink.newSetrâ   c                 G  s   d  dd„ |D ƒ¡S )NrB   c                 s  s    | ]}t |ƒV  qd S rf   )Úrepr)Ú.0r`  r;   r;   r<   Ú	<genexpr>h  s   € z.RDFSink.setDefaultNamespace.<locals>.<genexpr>)r%   r‹  r;   r;   r<   rã   g  rd  zRDFSink.setDefaultNamespaceré   ú8Tuple[Optional[Union[Formula, Graph]], Node, Node, Node]r  rd   c                 C  s–   |\}}}}t |dƒrtdƒ‚|  ||¡}|  ||¡}|  ||¡}|| jkr1| j |||f¡ d S t|tƒrA|j |||f¡ d S | |||f¡ d S )Nr¦   zFormula used as predicate)	Úhasattrr   Ú	normaliser…  r„  Úaddrµ   r*   r|  )r¢   ré   r   r‰  ÚprP   Úor;   r;   r<   rè   j  s   


zRDFSink.makeStatementú9Union[Tuple[int, str], bool, int, Decimal, sfloat, _AnyT]ú$Union[URIRef, Literal, BNode, _AnyT]c                 C  sä   t |tƒrtt|d ƒƒS t |tƒrtt|ƒ ¡ td}|S t |tƒs(t |t	ƒr2tt|ƒt
d}|S t |tƒrIt|ƒ}|dkrAd}t|td}|S t |tƒrXtt|ƒtd}|S t |tƒrp||jv rptrkt |tƒskJ ‚|j| S |S )NrC   r  z-0Ú0)rµ   rL  r   r2   r„   r   rÉ   ÚBOOLEAN_DATATYPEr4   r   ÚINTEGER_DATATYPEr   ÚDECIMAL_DATATYPEr-   ÚDOUBLE_DATATYPEr*   rz  r   )r¢   r‰  r`  rP   Úvaluer;   r;   r<   rœ  „  s.   






zRDFSink.normaliseÚ	somethingc                 C  s   |S rf   r;   )r¢   r¨  r;   r;   r<   r  ­  ó   zRDFSink.internc                 C  re   rf   r;   )r¢   r+  rá   r;   r;   r<   r‡   °  r©  zRDFSink.bindr¦   c                 C  s
   || _ d S rf   )r…  ©r¢   r¦   r;   r;   r<   r°   ³  r~  zRDFSink.startDocc                 C  re   rf   r;   rª  r;   r;   r<   r²   ¶  r©  zRDFSink.endDoc)r„  r   )r5   r*   )ru  r   r5   r   )rb   r2   r5   r   )NNN)rŒ  r  rá   r^   r   r‚   r5   r   )rP   r2   rI  rŽ  rJ  r^   r5   r   )r`  r‘  r‰  r}   r5   r   )rb   r0   r5   r•  )rb   râ   r5   r2   rf   )ré   rš  r   r  r5   rd   )r‰  r}   r`  r   r5   r¡  )r¨  r0   r5   r0   rg  )r¦   r}   r5   rd   )rw   rx   ry   r£   rž   rŠ  rœ   rû   rA  r  r  rã   rè   rœ  r  r‡   r°   r²   r;   r;   r;   r<   r+   '  s(    


	
ü



ý

)

r+   r\  râ   c                 C  sR   d}| D ]}t |ƒdkst |ƒdk rdt |ƒ }ndt |ƒ }|| }q| d¡S )z³Use URL encoding to return an ASCII string
    corresponding to the given UTF8 string

    ```python
    >>> hexify("http://example/a b")
    b'http://example/a%20b'

    ```
    r8   é~   é!   z%%%02Xz%czlatin-1)rV  ri  )r\  rP   r  r;   r;   r<   r)   À  s   

r)   c                   @  s(   e Zd ZdZdd„ Z		dddd„ZdS )r#   zFAn RDFLib parser for Turtle

    See http://www.w3.org/TR/turtle/
    c                 C  re   rf   r;   r¥   r;   r;   r<   r£   Û  r©  zTurtleParser.__init__r´   TÚsourcer/   r„  r   Úencodingr^   rƒ   r„   r5   rd   c                 C  s†   |dvr
t d| ƒ‚t|ƒ}| | ¡ p| ¡ pd¡}t|||d}| ¡ }|s,| ¡ }| |¡ |j	 
¡ D ]
\}	}
| |	|
¡ q6d S )Nrh  z:N3/Turtle files are always utf-8 encoded, I was passed: %sr8   )r   rƒ   )r   r+   Z
absolutizeZgetPublicIdZgetSystemIdr,   ZgetCharacterStreamZgetByteStreamr¬   rŽ   Úitemsr‡   )r¢   r­  r„  r®  rƒ   Zsinkr   rž  r¨   rÌ   Ú	namespacer;   r;   r<   ÚparseÞ  s   ÿ
ÿzTurtleParser.parseN)r´   T)
r­  r/   r„  r   r®  r^   rƒ   r„   r5   rd   ©rw   rx   ry   rz   r£   r±  r;   r;   r;   r<   r#   Õ  s    ûr#   c                   @  s&   e Zd ZdZdd„ Z	dddd„ZdS )r"   zZAn RDFLib parser for Notation3

    See http://www.w3.org/DesignIssues/Notation3.html
    c                 C  re   rf   r;   r¥   r;   r;   r<   r£   þ  r©  zN3Parser.__init__r´   r­  r/   r„  r   r®  r^   r5   rd   c                 C  sf   t |jddƒ}t |jddƒ}|stdƒ‚|stdƒ‚t|jd}||_|j|_tj| |||dd d S )NZcontext_awareFr†  z-Cannot parse N3 into non-context-aware store.z-Cannot parse N3 into non-formula-aware store.)r{   )rƒ   )r‡  r{   r   r   Zdefault_contextZnamespace_managerr#   r±  )r¢   r­  r„  r®  Úcarˆ  Z
conj_graphr;   r;   r<   r±    s   zN3Parser.parseN)r´   )r­  r/   r„  r   r®  r^   r5   rd   r²  r;   r;   r;   r<   r"   ø  s
    ÿr"   )r   )r1   r2   r3   r4   r5   r6   )r?   r2   r@   r2   r5   r2   rr  )rP   r2   r5   r2   )rb   r   rc   r   r5   rd   )rq   r	   r5   r2   )r\  r2   r5   râ   )rz   Ú
__future__r   r·   rN   ÚrerW  Útypingrl   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   rw  r   Zrdflib.compatr   Zrdflib.exceptionsr   Zrdflib.graphr   r   r   Zrdflib.termr   r   r   r   r   r   r   r   r    Ú__all__Zrdflib.parserr.   r/   r0   r$   r2   r=   r%   r&   rM   ÚCONTEXTZPREDZSUBJÚOBJZPARTSZALL4ZSYMBOLZFORMULAÚLITERALZ
LITERAL_DTZLITERAL_LANGZ	ANONYMOUSZ
XMLLITERALrø   ZNODE_MERGE_URIZ
forSomeSymZ	forAllSymZRDF_type_URIZ
RDF_NS_URIZOWL_NSZDAML_sameAs_URIZparsesTo_URIZRDF_specZList_NSZ_Old_Logic_NSZN3_firstZN3_restZN3_liZN3_nilZN3_ListZN3_Emptyr_   Ú__annotations__r'   r`   r(   r›   Zchatty_flagrh   rj   ZN3_forSome_URIZN3_forAll_URIr%  r÷   rù   ZLOG_implies_URIr£  r¥  r¦  ZFLOAT_DATATYPEr¤  Zoption_noregenr–  rÊ   rÈ   rÇ   Z_rdfnsr=  r<  r7  r;  rv   Úcompiler*  r(  ZN3CommentCharacterr2  r6  r5  Zsigned_integerrF  rE  rD  ZdigitstringrS  rG  r-   r,   ÚSyntaxErrorr!   r*   Zr_hibyter+   r)   r#   r"   r;   r;   r;   r<   Ú<module>   sî    @,

k


	













ÿ


          T'
' 
#