정규 표현식을 필요로하지 않는 문자열 조작을 사용하여 이와 같은 작업을 수행 할 수 있습니다.
select ?url ?hostname {
values ?url { <http://example.org/index.html> }
bind(strbefore(strafter(str(?url),"//"),"/") as ?hostname)
}
---------------------------------------------------
| url | hostname |
===================================================
| <http://example.org/index.html> | "example.org" |
---------------------------------------------------
정규 표현식을 사용하지 않는, 그리고보다 빠른 수 있습니다 : 예, 당신은 "//"후와 "/"전에 URL의 캐릭터 라인 형식의 참여할 수 정규식 기능을 사용하는 솔루션입니다. URL이 HTTP 같은 경우
그러나, 이것은 여전히, 예를 들어 호스트 이름, 것보다 더 많은 것을 얻을 수 있습니다 : // 사용자 이름 : [email protected] : 8080, 당신은 이름을 불렀 : 암호 @ example.org : 8080, 이는 단지 호스트 명 이상의 것입니다.
이 작업을보다 자세히 수행하려면 RFC 3986과 같은 URI/URL 등의 사양 중 하나를 선택하고 구문 구성 요소에 대한 섹션을 참조하십시오.그 문법에서 몇 관련 작품은 다음과 같습니다
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/path-absolute
/path-rootless
/path-empty
기관 컴퍼넌트가 더블 슬래시 ("//")로 시작하고 다음 슬래시 ("/")에 의해 종료 , 물음표 (이다 "?") 또는 숫자 기호 ("#") 문자 또는 URI의 끝 부분.
authority = [ userinfo "@" ] host [ ":" port ]
내가 모든 것을 통해 작동하지 않습니다 (그리고 어쩌면 복잡한 사건을 처리하기 위해 정규 표현식을 사용하는 것이 더 나을)하지만, 그냥 SPARQL에서 URI을하는 것이 가장 수 있습니다 결과를 가져온 다음 실제 URI 구문 분석 라이브러리를 사용하여 호스트 이름을 가져옵니다. 그것은 URI가 꽤 복잡 할 수 있기 때문에 가장 신뢰할 수있는 솔루션입니다.
URL의 도메인을 새 변수로 바인딩 한 다음이 변수를 SELECT 할 수 있습니다. String 연산과 REGEX에 대한 SPARQL 스펙을 참조하십시오. '/'가 처음 나타날 때까지 부분 문자열과 같은 것이 작동해야합니다. – AKSW
URL의 도메인을 새 변수에 바인딩하는 방법에 대해 자세히 설명해 주시겠습니까? 나는 REGEX 연산을 알고 있지만, 필터를 통해 결과를 버리는 것 같다. – user1156544