SPARQL GraphDB查询中如何提取URL的基础域名?
解决SPARQL提取URL基础域名的问题
你当前的SPARQL查询里,正则匹配失败主要是因为原正则.*://(.*?)/.*有两个关键缺陷:
- 要求URL必须包含域名后的斜杠,像
http://www.schema.org这种无后续路径的URL会匹配失败,直接返回原URL .*?的惰性匹配可能在复杂URL下捕获不完整
同时原查询的日期条件只限定了2001年,没法精准匹配5月的文章,也需要调整。
修正后的完整SPARQL查询如下:
PREFIX : <http://www.mysemantics.com/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?hostingWebsite WHERE { ?article a :Article . # 精准匹配2001年5月的文章 ?article :datePublished ?date . FILTER(?date >= "2001-05-01"^^xsd:date && ?date < "2001-06-01"^^xsd:date) ?article :hasAuthor :JamesHendler . ?article :url ?url . # 修正后的正则:兼容带路径和不带路径的URL,精准提取域名 BIND(REPLACE(?url, "^.*://([^/]+)(/.*)?$", "$1") AS ?hostingWebsite) }
正则说明:
^.*://:匹配URL开头的协议部分(http://、https://等)([^/]+):捕获://之后到第一个/之前的所有字符(即域名),[^/]表示非/的任意字符,+确保至少匹配一个字符(/.*)?$:匹配域名后的路径部分,?标记这部分为可选,兼容无后续斜杠的URL$1:引用第一个捕获组的内容,也就是提取到的域名
内容的提问来源于stack exchange,提问作者sgelena
相关产品推荐
相关产品推荐

