o
    iW                  	   @   s  U d dl Z d dl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mZmZ d dlmZ d dlmZmZ d dlmZmZmZ erQd dlmZ d d	lmZ d
Zg dZe e Z!G dd de"Z#G dd de"Z$h dZ%ee" e&d< G dd de'Z(G dd de(dZ)G dd de#Z*e#dZ+erd dl,m-Z- dZ.G dd dZ/g dZ0e0dg Z1e0g d  Z2g d!Z3d"e"d#e4fd$d%Z5e1fd&e"d'ee" d#ee"e"f fd(d)Z6d*e	e"ef d+e"d#e	e"ef fd,d-Z7d.e	e"ef d*e	e"ef d+e"d#dfd/d0Z8d*e	e"ef d+e"d#ee" fd1d2Z9d d3l:m;Z; d d4l<m=Z= d d5l>m?Z? d d6l@mAZA d d7lBmCZC d d8lDmEZE d d9lFmGZG d d:lHmIZI d d;lJmKZK d d<lLmMZM d d=lNmOZO d d>lPmQZQ d d?lRmSZS d d@lTmUZU d dAlVmWZW d dBlXmYZY d dClZm[Z[ d dDl\m]Z] d dEl^m_Z_ d dFl`maZa d dGlbmcZc d dHldmeZe d dIlfmgZg d dJlhmiZi d dKljmkZk d dLllmmZm d dMlnmoZo d dNlpmqZq eSe[e]eqe+dOZri dPe;dQe=dRe?dSeCdTeEdUeGdVeAdWeIdXeKdYeMdZeOd[eQd\eUd]eWd^eYd_e_d`eaeceeegeiekemeodaZsdS )b    N)	lru_cache)Path)	TYPE_CHECKINGAnyDictIterableListOptionalSetTupleUnion)category)	urldefragurljoin)URIRefVariable_is_valid_uri)Graph)Storea  
===================
Namespace Utilities
===================

RDFLib provides mechanisms for managing Namespaces.

In particular, there is a :class:`~rdflib.namespace.Namespace` class
that takes as its argument the base URI of the namespace.

.. code-block:: pycon

    >>> from rdflib.namespace import Namespace
    >>> RDFS = Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#")

Fully qualified URIs in the namespace can be constructed either by attribute
or by dictionary access on Namespace instances:

.. code-block:: pycon

    >>> RDFS.seeAlso
    rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#seeAlso')
    >>> RDFS['seeAlso']
    rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#seeAlso')


Automatic handling of unknown predicates
-----------------------------------------

As a programming convenience, a namespace binding is automatically
created when :class:`rdflib.term.URIRef` predicates are added to the graph.

Importable namespaces
-----------------------

The following namespaces are available by directly importing from rdflib:

* BRICK
* CSVW
* DC
* DCAT
* DCMITYPE
* DCTERMS
* DCAM
* DOAP
* FOAF
* ODRL2
* ORG
* OWL
* PROF
* PROV
* QB
* RDF
* RDFS
* SDO
* SH
* SKOS
* SOSA
* SSN
* TIME
* VANN
* VOID
* WGS
* XSD

.. code-block:: pycon

    >>> from rdflib.namespace import RDFS
    >>> RDFS.seeAlso
    rdflib.term.URIRef('http://www.w3.org/2000/01/rdf-schema#seeAlso')
)"	is_ncname	split_uri	NamespaceClosedNamespaceDefinedNamespaceNamespaceManagerBRICKCSVWDCDCAMDCATDCMITYPEDCTERMSDOAPFOAFGEOODRL2ORGOWLPROFPROVQBRDFRDFSSDOSHSKOSSOSASSNTIMEVANNVOIDWGSXSDc                       s   e Zd ZdZdeeef dd fddZede	fddZ
dede	fd	d
Zdede	fddZdede	fddZdef fddZdedefddZ  ZS )r   a  
    Utility class for quickly generating URIRefs with a common prefix

    >>> from rdflib.namespace import Namespace
    >>> n = Namespace("http://example.org/")
    >>> n.Person # as attribute
    rdflib.term.URIRef('http://example.org/Person')
    >>> n['first-name'] # as item - for things that are not valid python identifiers
    rdflib.term.URIRef('http://example.org/first-name')
    >>> n.Person in n
    True
    >>> n2 = Namespace("http://example2.org/")
    >>> n.Person in n2
    False
    valuereturnc                 C   s6   z	t | |}W |S  ty   t | |d}Y |S w Nzutf-8)str__new__UnicodeDecodeErrorclsr7   rt r@   T/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/namespace/__init__.pyr;      s   zNamespace.__new__c                 C   s   t | d S )Ntitler   selfr@   r@   rA   rB      s   zNamespace.titlenamec                 C   s   t | t|tr| S d S )N )r   
isinstancer:   rE   rF   r@   r@   rA   term   s   zNamespace.termkeyc                 C   
   |  |S NrJ   rE   rK   r@   r@   rA   __getitem__      
zNamespace.__getitem__c                 C   s   | drt| |S N__)
startswithAttributeErrorrJ   rI   r@   r@   rA   __getattr__   s   

zNamespace.__getattr__c                       dt    dS Nz
Namespace()super__repr__rD   	__class__r@   rA   r\         zNamespace.__repr__refc                 C   s
   | | S )a  Allows to check if a URI is within (starts with) this Namespace.

        >>> from rdflib import URIRef
        >>> namespace = Namespace('http://example.org/')
        >>> uri = URIRef('http://example.org/foo')
        >>> uri in namespace
        True
        >>> person_class = namespace['Person']
        >>> person_class in namespace
        True
        >>> obj = URIRef('http://not.example.org/bar')
        >>> obj in namespace
        False
        rT   rE   r`   r@   r@   rA   __contains__   s   
zNamespace.__contains__)__name__
__module____qualname____doc__r   r:   bytesr;   propertyr   rB   rJ   rP   rV   r\   boolrc   __classcell__r@   r@   r]   rA   r      s    r   c                       sd   e Zd ZdZdeeef dd fddZdef fddZ	def fdd	Z
def fd
dZ  ZS )
URIPatterna8  
    Utility class for creating URIs according to some pattern
    This supports either new style formatting with .format
    or old-style with % operator

    >>> u=URIPattern("http://example.org/%s/%d/resource")
    >>> u%('books', 12345)
    rdflib.term.URIRef('http://example.org/books/12345/resource')

    r7   r8   c                 C   sH   z	t | |}W |S  ty#   trt|tsJ t | |d}Y |S w r9   )r:   r;   r<   r   rH   rh   r=   r@   r@   rA   r;      s   zURIPattern.__new__c                       t t j|i |S rM   )r   r[   __mod__rE   argskwargsr]   r@   rA   rn         zURIPattern.__mod__c                    rm   rM   )r   r[   formatro   r]   r@   rA   rs      rr   zURIPattern.formatc                    rW   )NzURIPattern(rY   rZ   rD   r]   r@   rA   r\      r_   zURIPattern.__repr__)rd   re   rf   rg   r   r:   rh   r;   r   rn   rs   r\   rk   r@   r@   r]   rA   rl      s    	rl   >   _NS_fail_warn_extras_underscore_num_DFNS_RESERVED_ATTRSc                       s   e Zd ZU dZeed< dZeed< dZeed< g Z	e
e ed< dZeed< ed	d
d dedef fddZdefddZdefddZdefddZdedefddZdedef fddZdee fddZdedefddZ  ZS )!DefinedNamespaceMetaz>Utility metaclass for generating URIRefs with a common prefix.rt   Trv   Fru   rw   rx   N)maxsizerF   r8   c                    s   t |}|tv rtd|t |drt ||S | js#| jrD|| vrD| jr6td| d| j dt	j
d| d| j dd	 | j| S )
Nz.DefinedNamespace like object has no attribute rS   term '' not in namespace ''zCode: z is not defined in namespace    )
stacklevel)r:   ry   rU   rT   r[   rP   rv   ru   rt   warningswarnrd   )r>   rF   defaultr]   r@   rA   rP      s   
z DefinedNamespaceMeta.__getitem__c                 C   rL   rM   rP   )r>   rF   r@   r@   rA   rV     rQ   z DefinedNamespaceMeta.__getattr__c                 C   s   dt | jdS rX   r:   rt   r>   r@   r@   rA   r\     r_   zDefinedNamespaceMeta.__repr__c                 C   
   t | jS rM   r   r   r@   r@   rA   __str__  rQ   zDefinedNamespaceMeta.__str__otherc                 C   rL   rM   r   )r>   r   r@   r@   rA   __add__  rQ   zDefinedNamespaceMeta.__add__itemc                    s`   t |drt |S t  jr"tt  jd t fdd  D S )zGDetermine whether a URI or an individual item belongs to this namespacerS   Nc                 3   sP    | ]#}t |tr|jv p#|jv p# jo#d  dko#dd  V  qdS )r   _   N)
issubclassr   __annotations__rw   rx   isdigit).0cr>   item_strr@   rA   	<genexpr>  s    
 
z4DefinedNamespaceMeta.__contains__.<locals>.<genexpr>)r:   rT   r[   rc   rt   lenanymro)r>   r   r]   r   rA   rc     s   
z!DefinedNamespaceMeta.__contains__c                    s0   dd  j D }|t  fdd|D }|S )Nc                 S   s   h | ]}t |qS r@   r:   r   xr@   r@   rA   	<setcomp>&  s    z/DefinedNamespaceMeta.__dir__.<locals>.<setcomp>c                    s   h | ]} t | qS r@   r   r   r   r@   rA   r   )  s    )r   difference_updatery   )r>   attrsvaluesr@   r   rA   __dir__%  s   
zDefinedNamespaceMeta.__dir__pfxc                 C   sF   |t | ji}| j D ]\}}t|tr| d| ||< qd|iS )z=Returns this DefinedNamespace as a a JSON-LD 'context' object:z@context)r:   rt   r   itemsr   r   )rE   r   termsrK   rJ   r@   r@   rA   as_jsonld_context,  s   
z&DefinedNamespaceMeta.as_jsonld_contextrM   )rd   re   rf   rg   r   r   rv   rj   ru   rw   r   r:   rx   r   r   rP   rV   r\   r   r   rc   r   r   dictr   rk   r@   r@   r]   rA   rz      s    
 rz   c                   @   s   e Zd ZdZdd ZdS )r   z
    A Namespace with an enumerated list of members.
    Warnings are emitted if unknown members are referenced if _warn is True
    c                 C   s   t d)Nz!namespace may not be instantiated)	TypeErrorrD   r@   r@   rA   __init__<     zDefinedNamespace.__init__N)rd   re   rf   rg   r   r@   r@   r@   rA   r   6  s    r   )	metaclassc                       s   e Zd ZU dZeeef ed< dedee f fddZ	e
defdd	Zd
edefddZdedefddZd
edefddZdefddZdee fddZdedefddZdee fddZ  ZS )r   zf
    A namespace with a closed list of members

    Trying to create terms not listed is an error
    _ClosedNamespace__urisurir   c                    s&   t  | |  fdd|D  _ S )Nc                    s   i | ]	}|t  | qS r@   rC   )r   tr?   r@   rA   
<dictcomp>K  s    z+ClosedNamespace.__new__.<locals>.<dictcomp>)r[   r;   r   )r>   r   r   r]   r   rA   r;   I  s   zClosedNamespace.__new__r8   c                 C      t | S rM   r   rD   r@   r@   rA   r   N     zClosedNamespace.urirF   c                 C   s.   | j |}|d u rtd| d|  d|S )Nr|   r}   r~   )r   getKeyError)rE   rF   r   r@   r@   rA   rJ   R  s   zClosedNamespace.termrK   c                 C   rL   rM   rN   rO   r@   r@   rA   rP   X  rQ   zClosedNamespace.__getitem__c              
   C   s<   | drtz| |W S  ty } zt|d }~ww rR   )rT   rU   rJ   r   )rE   rF   er@   r@   rA   rV   [  s   
zClosedNamespace.__getattr__c                 C   s    | j  d| jj dt| dS )N.(rY   )re   r^   rd   r:   rD   r@   r@   rA   r\   d  s    zClosedNamespace.__repr__c                 C   r   rM   )listr   rD   r@   r@   rA   r   g  rQ   zClosedNamespace.__dir__r`   c                 C   s   || j  v S rM   )r   r   rb   r@   r@   rA   rc   j  s   zClosedNamespace.__contains__c                 C   r   rM   )dirrD   r@   r@   rA   _ipython_key_completions_o  r   z)ClosedNamespace._ipython_key_completions_)rd   re   rf   rg   r   r:   r   r   r   r;   ri   r   rJ   rP   rV   r\   r   rj   rc   r   rk   r@   r@   r]   rA   r   @  s   
 	r   z$http://www.w3.org/XML/1998/namespace)_NamespaceSetStringTc                   @   sh  e Zd ZdZ	d5			d6ddZd	ed
efddZd7ddZe	d8ddZ
ded
efddZd9deded
efddZded
efddZded
efddZd9deded
eeeef fdd Z	d9deded
eeeef fd!d"Zd#ed
efd$d%Zd&ed'ed(ed
dfd)d*Z		+d:d&ee d'ed(ed,ed
df
d-d.Zd
eeeef  fd/d0Zd;ded2ed
efd3d4ZdS )<r   a  Class for managing prefix => namespace mappings

    This class requires an RDFlib Graph as an input parameter and may optionally have
    the parameter bind_namespaces set. This second parameter selects a strategy which
    is one of the following:

    * core:
        * binds several core RDF prefixes only
        * owl, rdf, rdfs, xsd, xml from the NAMESPACE_PREFIXES_CORE object
    * rdflib:
        * binds all the namespaces shipped with RDFLib as DefinedNamespace instances
        * all the core namespaces and all the following: brick, csvw, dc, dcat
        * dcmitype, dcterms, dcam, doap, foaf, geo, odrl, org, prof, prov, qb, schema
        * sh, skos, sosa, ssn, time, vann, void
        * see the NAMESPACE_PREFIXES_RDFLIB object for the up-to-date list
        * this is default
    * none:
        * binds no namespaces to prefixes
        * note this is NOT default behaviour
    * cc:
        * using prefix bindings from prefix.cc which is a online prefixes database
        * not implemented yet - this is aspirational

    .. attention::

        The namespaces bound for specific values of ``bind_namespaces``
        constitute part of RDFLib's public interface, so changes to them should
        only be additive within the same minor version. Removing values, or
        removing namespaces that are bound by default, constitutes a breaking
        change.

    See the
    Sample usage

    .. code-block:: pycon

        >>> import rdflib
        >>> from rdflib import Graph
        >>> from rdflib.namespace import Namespace, NamespaceManager
        >>> EX = Namespace('http://example.com/')
        >>> namespace_manager = NamespaceManager(Graph())
        >>> namespace_manager.bind('ex', EX, override=False)
        >>> g = Graph()
        >>> g.namespace_manager = namespace_manager
        >>> all_ns = [n for n in g.namespace_manager.namespaces()]
        >>> assert ('ex', rdflib.term.URIRef('http://example.com/')) in all_ns
        >>>
    rdflibgraphr   bind_namespacesr   c                 C   s   || _ i | _i | _d | _i | _i | _|dkrd S |dkr<t D ]
\}}| || q t	 D ]
\}}| || q/d S |dkrDt
d|dkrYt	 D ]
\}}| || qLd S td| )Nnoner   cczHaven't got to this option yetcorezunsupported namespace set )r   _NamespaceManager__cache_NamespaceManager__cache_strict_NamespaceManager__log_NamespaceManager__strie_NamespaceManager__trie_NAMESPACE_PREFIXES_RDFLIBr   bind_NAMESPACE_PREFIXES_CORENotImplementedError
ValueError)rE   r   r   prefixnsr@   r@   rA   r     s*   zNamespaceManager.__init__r`   r8   c                    s   t  fdd|  D S )Nc                 3   s    | ]
\}}  |V  qd S rM   ra   )r   r   r   r`   r@   rA   r     s    z0NamespaceManager.__contains__.<locals>.<genexpr>)r   
namespacesrb   r@   r   rA   rc     s   zNamespaceManager.__contains__Nc                 C   s8   i | _ i | _i | _|  D ]\}}t| jt| qd S rM   )r   r   r   r   insert_trier:   )rE   pnr@   r@   rA   reset  s   zNamespaceManager.resetr   c                 C   s   | j jS rM   )r   storerD   r@   r@   rA   r     r   zNamespaceManager.storer   c                 C   *   |  |\}}}|dkr|S d||fS NrG   r   compute_qnamejoinrE   r   r   	namespacerF   r@   r@   rA   qname     zNamespaceManager.qnameTgeneratec                 C   s"   | j ||d\}}}d||fS )a  
        From a URI, generate a valid CURIE.

        Result is guaranteed to contain a colon separating the prefix from the
        name, even if the prefix is an empty string.

        .. warning::

            When ``generate`` is `True` (which is the default) and there is no
            matching namespace for the URI in the namespace manager then a new
            namespace will be added with prefix ``ns{index}``.

            Thus, when ``generate`` is `True`, this function is not a pure
            function because of this side-effect.

            This default behaviour is chosen so that this function operates
            similarly to `NamespaceManager.qname`.

        :param uri: URI to generate CURIE for.
        :param generate: Whether to add a prefix for the namespace if one doesn't
            already exist.  Default: `True`.
        :return: CURIE for the URI.
        :raises KeyError: If generate is `False` and the namespace doesn't already have
            a prefix.
        )r   r   r   )rE   r   r   r   r   rF   r@   r@   rA   curie  s   zNamespaceManager.curiec                 C   r   r   )compute_qname_strictr   r   r@   r@   rA   qname_strict
  r   zNamespaceManager.qname_strictrdfTermc                 C   s   zt |\}}|| jvrt| j| jt| tt|}W n ty5   t|tr/d|  Y S d|  Y S w | j	
|}|du rIt|trId| S |du rQd| S | |}d|d |d gS )z
        Takes an RDF Term and 'normalizes' it into a QName (using the
        registered prefix) or (unlike compute_qname) the Notation 3
        form for URIs: <...URI...>
        z?%sz<%s>Nr   r   )r   r   insert_strier   r:   r   	ExceptionrH   r   r   r   r   r   )rE   r   r   rF   r   
qNamePartsr@   r@   rA   normalizeUri  s"   


zNamespaceManager.normalizeUric           	   
   C   s@  || j vrt|std|zt|\}}W n" ty: } zt|}| j|}d}|s0|W Y d }~nd }~ww || jvrHt	| j| j
| | j| rct| j| |}|d urc|}|t|d  }t|}| j|}|d u r|sztd|d}	 d| }| j|sn|d7 }q}| || |||f| j |< | j | S )NzY"{}" does not look like a valid URI, cannot serialize this. Did you want to urlencode it?rG   )No known prefix for {} and generate=Falser   ns%s)r   r   r   rs   r   r   r   r   r   r   r   get_longest_namespacer   r   r   r   )	rE   r   r   r   rF   r   r   pl_namespacenumr@   r@   rA   r   *  sT   



zNamespaceManager.compute_qnamec                 C   s   |  ||\}}}tt|r|||fS || jvrxz	t|t\}}W n ty2   d|}t|w || jvr@t	| j| j
| t|}| j|}|d u rp|sWtd|d}	 d| }| j|sen|d7 }qZ| || |||f| j|< | j| S )Nz^This graph cannot be serialized to a strict format because there is no valid way to shorten {}r   r   r   )r   r   r:   r   r   NAME_START_CATEGORIESr   rs   r   r   r   r   r   r   r   r   r   )rE   r   r   r   r   rF   messager   r@   r@   rA   r   W  sF   


	
z%NamespaceManager.compute_qname_strictr   c                 C   s   t |turtdt |j d|dd}t|dkr!td| j|d }|dur9t	t| |d  S td	|dd  d
)aw  
        Expand a CURIE of the form <prefix:element>, e.g. "rdf:type"
        into its full expression:

        >>> import rdflib
        >>> g = rdflib.Graph()
        >>> g.namespace_manager.expand_curie("rdf:type")
        rdflib.term.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type')

        Raises exception if a namespace is not bound to the prefix.

        zArgument must be a string, not r   r   r      u@   Malformed curie argument, format should be e.g. “foaf:name”.r   NzPrefix "z" not bound to any namespace.)
typer:   r   rd   splitr   r   r   r   r   )rE   r   partsr   r@   r@   rA   expand_curie  s   zNamespaceManager.expand_curier   r   overridec              
   C   s   t s	| j||S z
| jj|||dW S  tyD } z%dt|v r9tjdt| jdd | j||W  Y d }~S W Y d }~d S d }~ww )Nr   r   z}caught a TypeError, retrying call to %s.bind without override, see https://github.com/RDFLib/rdflib/issues/1880 for more infoT)exc_info)_with_bind_override_fixr   r   r   r:   loggerwarningr   )rE   r   r   r   errorr@   r@   rA   _store_bind  s   zNamespaceManager._store_bindFreplacec           
      C   s<  t t|}|du rd}nd|v rtd| j|}|r!t |}|rm||krm|r;| j|||d t| jt| dS |s?d}d}	 d||f }| j|}|rX|t |krXdS | j|s_n|d7 }qB| j|||d n'| j|}	|	du r| j|||d n|	|krn|s|		d	r| j|||d t| jt| dS )
zBind a given namespace to the prefix

        If override, rebind, even if the given namespace is already
        bound to another prefix.

        If replace, replace any existing prefix with the new namespace

        NrG    z Prefixes may not contain spaces.r   r   r   z%s%sr   )
r   r:   r   r   r   r   r   r   r   rT   )
rE   r   r   r   r   bound_namespacer   
new_prefix
tnamespacebound_prefixr@   r@   rA   r     sD   
zNamespaceManager.bindc                 c   s,    | j  D ]\}}t|}||fV  qd S rM   )r   r   r   )rE   r   r   r@   r@   rA   r     s
   zNamespaceManager.namespacesr   defragc                 C   s`   t   }td| || d}|rt|d }|s,|r,|d dkr,|d dkr,d| }t|S )Nz%s/)allow_fragmentsr   r   #z%s#)r   cwdas_urir   r   r   )rE   r   r  baseresultr@   r@   rA   
absolutize  s   zNamespaceManager.absolutize)r   )r   r   r   r   )r8   N)r8   r   )T)TF)r   )rd   re   rf   rg   r   r:   rj   rc   r   ri   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r   intr  r@   r@   r@   rA   r   {  sT    2
'
".
<
Cr   )LlLuLoLtNlNd)McMeMnLmr  )   ·u   ·-r   r   %r   rY   rF   r8   c                 C   s`   | r.| d }|dkst |tv r.tdt| D ]}| | }t |tvr+|tv r(q dS qdS dS )Nr   r   r   )r   r   ranger   NAME_CATEGORIESALLOWED_NAME_CHARS)rF   firstir   r@   r@   rA   r   A  s   r   r   split_startc                 C   s   |  trt| td fS t| }td|D ]F}| | d  }t|tvr]|tv r+qtd| |D ](}t| | |v sB| | dkrZ| d | }|sL n| |d  }||f    S q2 nqtd	| )Nr   r   r   r   zCan't split '{}')
rT   XMLNSr   r   r  r   r  r  r   rs   )r   r  lengthr  r   jr   lnr@   r@   rA   r   T  s&   
r   trier7   c                 C   s   || v r| | S d}t |  D ]0}t|t|kr(||r(t| | |  S ||r@|s5i | |< d}| |}|| | |< q|| vrIi | |< | | S )zInsert a value into the trie if it is not already contained in the trie.
    Return the subtree for the value regardless of whether it is a new value
    or not.FT)tuplekeysr   rT   r   pop)r!  r7   multi_checkrK   dict_r@   r@   rA   r   k  s$   
r   striec                 C   s   || vrt ||| |< d S d S rM   )r   )r'  r!  r7   r@   r@   rA   r     s   r   c                 C   s>   | D ]}| |rt| | |}|d u r|  S |  S qd S rM   )rT   r   )r!  r7   rK   outr@   r@   rA   r     s   
r   )r   )r   )r   )r   )r   )r    )r!   )r"   )r#   )r$   )r%   )r&   )r'   )r(   )r)   )r*   )r+   )r,   )r-   )r.   )r/   )r0   )r1   )r2   )r3   )r4   )r5   )r6   )owlrdfrdfsxsdxmlbrickcsvwdcdcatdcmitypedctermsdcamdoapfoafgeoodrlorgprofprovqbschemash)skossosassntimevannvoidwgs)tloggingr   	functoolsr   pathlibr   typingr   r   r   r   r   r	   r
   r   r   unicodedatar   urllib.parser   r   rdflib.termr   r   r   rdflib.graphr   rdflib.storer   rg   __all__	getLoggerrd   r   r:   r   rl   ry   r   r   rz   r   r   r  rdflib._type_checkingr   r   r   r   SPLIT_START_CATEGORIESr  r  r	  r   r   r   r   r   rdflib.namespace._BRICKr   rdflib.namespace._CSVWr   rdflib.namespace._DCr   rdflib.namespace._DCAMr   rdflib.namespace._DCATr   rdflib.namespace._DCMITYPEr    rdflib.namespace._DCTERMSr!   rdflib.namespace._DOAPr"   rdflib.namespace._FOAFr#   rdflib.namespace._GEOr$   rdflib.namespace._ODRL2r%   rdflib.namespace._ORGr&   rdflib.namespace._OWLr'   rdflib.namespace._PROFr(   rdflib.namespace._PROVr)   rdflib.namespace._QBr*   rdflib.namespace._RDFr+   rdflib.namespace._RDFSr,   rdflib.namespace._SDOr-   rdflib.namespace._SHr.   rdflib.namespace._SKOSr/   rdflib.namespace._SOSAr0   rdflib.namespace._SSNr1   rdflib.namespace._TIMEr2   rdflib.namespace._VANNr3   rdflib.namespace._VOIDr4   rdflib.namespace._WGSr5   rdflib.namespace._XSDr6   r   r   r@   r@   r@   rA   <module>   s   
 ,H
%?#	L
3   <






*"	
