@@ -1098,7 +1098,7 @@ def base(self) -> typing.Union[str, pathlib.Path]:
10981098 return self ._parent ._fname .parent if (self ._parent and self ._parent ._fname ) else \
10991099 (self ._fname .parent if self ._fname else None )
11001100
1101- def expand (self , tmpl : URITemplate , row : dict , _row , _name = None , qname = False , uri = False ) -> str :
1101+ def expand (self , tmpl : URITemplate , row : dict , _row , _name = None , qname = False ) -> str :
11021102 """
11031103 Expand a `URITemplate` using `row`, `_row` and `_name` as context and resolving the result
11041104 against `TableLike.url`.
@@ -1113,25 +1113,28 @@ def expand(self, tmpl: URITemplate, row: dict, _row, _name=None, qname=False, ur
11131113 'https://raw.githubusercontent.com/path?1#2'
11141114
11151115 """
1116- assert not (qname and uri )
11171116 if tmpl is INVALID :
11181117 return self .url .resolve (self .base )
1119- res = Link (
1120- tmpl .expand (
1121- _row = _row , _name = _name , ** {_k : _v for _k , _v in row .items () if isinstance (_k , str )}
1122- )).resolve (self .url .resolve (self .base ) if self .url else self .base )
1118+
1119+ for prefix , url in NAMESPACES .items ():
1120+ if tmpl .uri .startswith (prefix + ':' ):
1121+ # If the URI Template is a QName, we expand it to a URL to prevent `Link.resolve`
1122+ # from turning it into a local path.
1123+ res = '{}{}' .format (url , tmpl .uri .split (':' )[1 ])
1124+ break
1125+ else :
1126+ res = Link (
1127+ tmpl .expand (
1128+ _row = _row ,
1129+ _name = _name ,
1130+ ** {_k : _v for _k , _v in row .items () if isinstance (_k , str )}
1131+ )).resolve (self .url .resolve (self .base ) if self .url else self .base )
11231132 if not isinstance (res , pathlib .Path ):
11241133 if qname :
11251134 for prefix , url in NAMESPACES .items ():
11261135 if res .startswith (url ):
11271136 res = res .replace (url , prefix + ':' )
11281137 break
1129- if uri :
1130- if res != 'rdf:type' :
1131- for prefix , url in NAMESPACES .items ():
1132- if res .startswith (prefix + ':' ):
1133- res = res .replace (prefix + ':' , url )
1134- break
11351138 return res
11361139
11371140
0 commit comments