Sie können so etwas mit einer Zeichenfolgenmanipulation durchführen, für die keine regulären Ausdrücke erforderlich sind. Zum Beispiel können Sie den Teil der Zeichenfolge Form der URL nach einem „//“ und vor einem „/“ nehmen:
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" |
---------------------------------------------------
, die nicht reguläre Ausdrücke nicht verwendet, und können schneller sein als eine Lösung mit der Regex Funktion.
Allerdings könnte dies noch erhalten Sie mehr als einen Hostnamen, zum Beispiel, wenn die URL so etwas wie http: // username: [email protected]: 8080, wo Sie Benutzernamen bekommen würde: Passwort @ example.org:8080, das ist mehr als nur Hostname.
Um dies genauer zu machen, sollten Sie eine der URI/URL-Spezifikationen wie RFC 3986 auswählen und einen Blick auf den Abschnitt über Syntaxkomponenten werfen.Einige relevanten Produktionen von dieser Grammatik sind:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/path-absolute
/path-rootless
/path-empty
Die Autorität Komponente durch einen Doppelstrich („//“) vorgeschaltet ist und durch den nächsten Schrägstrich beendet („/“), Fragezeichen ("?") oder Nummer Zeichen ("#") Zeichen, oder am Ende der URI.
authority = [ userinfo "@" ] host [ ":" port ]
Ich werde nicht durch alles, was Arbeit (und vielleicht wäre es sinnvoll, einen regulären Ausdruck zu verwenden, um die komplexen Fälle zu behandeln), aber es könnte sein, am einfachsten, nur die URI nehmen von der SPARQL Ergebnis und verwenden Sie dann eine tatsächliche URI-Parsing-Bibliothek, um den Hostnamen zu erhalten. Das ist die zuverlässigste Lösung, da URIs sehr komplex sein können.
Sie könnten die Domäne einer URL an eine neue Variable BIND und dann diese Variable SELECT. Weitere Informationen finden Sie in den SPARQL-Spezifikationen für String-Operationen und REGEX. So etwas wie die Teilzeichenfolge bis zum ersten Auftreten von '/' sollte funktionieren. – AKSW
Kannst du bitte erläutern, wie ich die Domain der URLs an eine neue Variable binden könnte? Ich kenne die REGEX-Operationen, aber sie scheinen Ergebnisse über FILTER – user1156544