summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/tools/ttl_loader.c4
-rw-r--r--docs/website/overview.md38
-rw-r--r--meson_options.txt2
-rw-r--r--po/zh_TW.po478
-rw-r--r--src/libtracker-common/tracker-date-time.c2
-rw-r--r--src/libtracker-data/tracker-data-manager.c6
-rw-r--r--src/libtracker-data/tracker-data-update.c5
-rw-r--r--src/libtracker-data/tracker-db-interface-sqlite.c2
-rw-r--r--src/libtracker-data/tracker-sparql.c58
-rw-r--r--src/libtracker-data/tracker-sparql.h3
-rw-r--r--src/libtracker-data/tracker-turtle-reader.c30
-rw-r--r--src/libtracker-data/tracker-turtle-reader.h1
-rw-r--r--tests/functional-tests/test-data/test-movie.ttl1
-rw-r--r--tests/libtracker-data/datetime/data-4.rq4
-rw-r--r--tests/libtracker-data/datetime/direct-1.out1
-rw-r--r--tests/libtracker-data/datetime/direct-1.rq1
-rw-r--r--tests/libtracker-data/datetime/insert-1.out1
-rw-r--r--tests/libtracker-data/datetime/insert-1.rq4
-rw-r--r--tests/libtracker-data/tracker-sparql-test.c2
19 files changed, 349 insertions, 294 deletions
diff --git a/docs/tools/ttl_loader.c b/docs/tools/ttl_loader.c
index dfa9ce5db..08b634588 100644
--- a/docs/tools/ttl_loader.c
+++ b/docs/tools/ttl_loader.c
@@ -390,7 +390,7 @@ ttl_loader_load_ontology (Ontology *ontology,
while (inner_error == NULL &&
tracker_turtle_reader_next (reader,
&subject, &predicate, &object,
- NULL, &inner_error)) {
+ NULL, NULL, &inner_error)) {
load_in_memory (ontology, subject, predicate, object);
}
@@ -429,7 +429,7 @@ ttl_loader_load_description (GFile *file)
while (error == NULL &&
tracker_turtle_reader_next (reader,
&subject, &predicate, &object,
- NULL, &error)) {
+ NULL, NULL, &error)) {
load_description (desc, subject, predicate, object);
}
diff --git a/docs/website/overview.md b/docs/website/overview.md
index d20a2d94f..92ecaf9fe 100644
--- a/docs/website/overview.md
+++ b/docs/website/overview.md
@@ -53,14 +53,16 @@ provided by Tracker to gnome-shell.
The following GNOME applications use Tracker:
- * [GNOME Books](https://wiki.gnome.org/Apps/Books) (uses Tracker to find ebooks)
- * [GNOME Boxes](https://wiki.gnome.org/Apps/Boxes) (uses Tracker to find VM images)
- * [GNOME Documents](https://wiki.gnome.org/Apps/Documents) (uses Tracker to find documents)
- * [GNOME Files](https://wiki.gnome.org/Apps/Files) (uses Tracker for full-text search within files)
- * [GNOME Games](https://wiki.gnome.org/Apps/Games) (uses Tracker to find games)
- * [GNOME Music](https://wiki.gnome.org/Apps/Music) (uses Tracker to find music and store playlist data)
- * [GNOME Photos](https://wiki.gnome.org/Apps/Photos) (uses Tracker to find photos and store album data)
- * [GNOME Videos](https://wiki.gnome.org/Apps/Videos) (uses Tracker to find video content)
+ * [GNOME Books](https://wiki.gnome.org/Apps/Books) (uses Tracker Miner FS to find ebooks)
+ * [GNOME Boxes](https://wiki.gnome.org/Apps/Boxes) (uses Tracker Miner FS to find VM images)
+ * [GNOME Documents](https://wiki.gnome.org/Apps/Documents) (uses Tracker Miner FS to find documents)
+ * [GNOME Files](https://wiki.gnome.org/Apps/Files) (uses Tracker Miner FS for full-text search within files)
+ * [GNOME Games](https://wiki.gnome.org/Apps/Games) (uses Tracker Miner FS to find games)
+ * [GNOME Music](https://wiki.gnome.org/Apps/Music) (uses Tracker Miner FS to find music and store playlist data)
+ * [GNOME Notes](https://wiki.gnome.org/Apps/Notes) (uses Tracker SPARQL to store notes)
+ * [GNOME Photos](https://wiki.gnome.org/Apps/Photos) (uses Tracker Miner FS to find photos and Tracker SPARQL to store album data)
+ * [GNOME Usage](https://gitlab.gnome.org/GNOME/gnome-usage) (uses Tracker Miner FS to measure disk usage)
+ * [GNOME Videos](https://wiki.gnome.org/Apps/Videos) (uses Tracker Miner FS to find video content)
Although Tracker is able to store contacts and calendar entries,
GNOME uses [Evolution Data Server](https://developer.gnome.org/platform-overview/stable/tech-eds.html)
@@ -75,27 +77,33 @@ for this.
### Media tools
[Grilo](https://wiki.gnome.org/Projects/Grilo) is a library for finding and
-fetching media content from many different sources. It uses Tracker to browse
-and search local media content.
+fetching media content from many different sources. It uses Tracker Miner FS to
+browse and search local media content.
+
+[Netatalk](http://netatalk.sourceforge.net/) is an [Apple Filing
+Protocol](https://en.wikipedia.org/wiki/Apple_Filing_Protocol) media server.
+It [uses Tracker Miner FS](http://netatalk.sourceforge.net/3.1/htmldocs/configuration.html#idm140604592868992)
+to search through server content.
[Rygel](https://wiki.gnome.org/Projects/Rygel) is a home media solution that serves
-content over UPnP. It uses Tracker to find your media files.
+content over UPnP. It uses Tracker Miner FS to find your media files.
### Sailfish OS
-[Sailfish OS](https://sailfishos.org) uses Tracker for [indexing media
+[Sailfish OS](https://sailfishos.org) uses Tracker Miner FS for [indexing media
content](https://sailfishos.org/wiki/Core_Areas_and_APIs).
## Related projects
-[Xapian](https://xapian.org/) provides similar functionality to Tracker.
-It focuses more on scalability and less on having a lightweight footprint.
+[Xapian](https://xapian.org/) provides similar functionality to Tracker Miner
+FS. It focuses more on scalability and less on having a lightweight footprint.
Unlike Tracker, it doesn't support SPARQL or provide a Linked Data endpoint.
[Baloo](https://community.kde.org/Baloo) is a metadata and search framework by
KDE, implemented using Xapian.
-[Recoll](https://www.lesbonscomptes.com/recoll/) is a cross-platform desktop search application powered by Xapian.
+[Recoll](https://www.lesbonscomptes.com/recoll/) is a cross-platform desktop
+search application powered by Xapian.
[Apache Lucene + Solr](http://lucene.apache.org/) is a search engine which
targets very large-scale workloads. It has a much heavier footprint compared to
diff --git a/meson_options.txt b/meson_options.txt
index 1c3372966..2bf362269 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -5,8 +5,6 @@ option('man', type: 'boolean', value: true, yield: true,
option('override_sqlite_version_check', type: 'boolean', value: false,
description: 'Override checks for broken sqlite versions')
-option('network_manager', type: 'feature', value: 'auto',
- description: 'Connection detection through NetworkManager')
option('stemmer', type: 'feature', value: 'auto',
description: 'Stemming words while indexing')
option('unicode_support', type: 'combo', choices: ['icu', 'unistring', 'auto'], value: 'auto',
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 156a4d812..a644ea454 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: tracker master\n"
"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/tracker/issues\n"
-"POT-Creation-Date: 2020-04-27 21:38+0000\n"
-"PO-Revision-Date: 2020-05-02 16:20+0800\n"
+"POT-Creation-Date: 2020-09-23 10:16+0000\n"
+"PO-Revision-Date: 2020-10-12 22:44+0800\n"
"Last-Translator: Cheng-Chia Tseng <pswo10680@gmail.com>\n"
"Language-Team: Chinese <zh-l10n@linux.org.tw>\n"
"Language: zh_TW\n"
@@ -16,64 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 2.3\n"
-
-#: src/libtracker-common/tracker-utils.c:90
-msgid "unknown time"
-msgstr "不明的時間"
-
-#: src/libtracker-common/tracker-utils.c:104
-#: src/libtracker-common/tracker-utils.c:155
-msgid "less than one second"
-msgstr "少於一秒"
-
-#. Translators: this is %d days
-#: src/libtracker-common/tracker-utils.c:119
-#, c-format
-msgid " %dd"
-msgstr " %d天"
-
-#. Translators: this is %2.2d hours
-#: src/libtracker-common/tracker-utils.c:123
-#, c-format
-msgid " %2.2dh"
-msgstr " %2.2d時"
-
-#. Translators: this is %2.2d minutes
-#: src/libtracker-common/tracker-utils.c:127
-#, c-format
-msgid " %2.2dm"
-msgstr " %2.2d分"
-
-#. Translators: this is %2.2d seconds
-#: src/libtracker-common/tracker-utils.c:131
-#, c-format
-msgid " %2.2ds"
-msgstr " %2.2d秒"
-
-#: src/libtracker-common/tracker-utils.c:135
-#, c-format
-msgid " %d day"
-msgid_plural " %d days"
-msgstr[0] " %d 天"
-
-#: src/libtracker-common/tracker-utils.c:139
-#, c-format
-msgid " %2.2d hour"
-msgid_plural " %2.2d hours"
-msgstr[0] " %2.2d 小時"
-
-#: src/libtracker-common/tracker-utils.c:143
-#, c-format
-msgid " %2.2d minute"
-msgid_plural " %2.2d minutes"
-msgstr[0] " %2.2d 分鐘"
-
-#: src/libtracker-common/tracker-utils.c:147
-#, c-format
-msgid " %2.2d second"
-msgid_plural " %2.2d seconds"
-msgstr[0] " %2.2d 秒"
+"X-Generator: Poedit 2.4.1\n"
#. Translators: this is a '|' (U+007C) separated list of common
#. * title beginnings. Meant to be skipped for sorting purposes,
@@ -85,135 +28,158 @@ msgstr[0] " %2.2d 秒"
msgid "the|a|an"
msgstr "the|a|an"
-#: src/tracker/tracker-endpoint.c:47 src/tracker/tracker-export.c:41
-#: src/tracker/tracker-import.c:45 src/tracker/tracker-info.c:53
-#: src/tracker/tracker-sparql.c:107 src/tracker/tracker-sql.c:44
+#: src/portal/tracker-main.c:53
+msgid "Version"
+msgstr "版本"
+
+#: src/portal/tracker-main.c:110 src/tracker/tracker-endpoint.c:299
+#: src/tracker/tracker-export.c:517 src/tracker/tracker-import.c:160
+#: src/tracker/tracker-sparql.c:1557 src/tracker/tracker-sql.c:237
+msgid "Unrecognized options"
+msgstr "無法辨識的選項"
+
+#: src/tracker/tracker-endpoint.c:48 src/tracker/tracker-export.c:47
+#: src/tracker/tracker-import.c:45 src/tracker/tracker-sparql.c:110
+#: src/tracker/tracker-sql.c:44
msgid "Location of the database"
msgstr "資料庫的位置"
-#: src/tracker/tracker-endpoint.c:48 src/tracker/tracker-endpoint.c:60
+#: src/tracker/tracker-endpoint.c:49 src/tracker/tracker-endpoint.c:61
msgid "DIR"
msgstr "DIR"
-#: src/tracker/tracker-endpoint.c:51
+#: src/tracker/tracker-endpoint.c:52
msgid "Specify the DBus name of this endpoint"
msgstr "指定此端點的 DBus 名稱"
-#: src/tracker/tracker-endpoint.c:52 src/tracker/tracker-endpoint.c:56
+#: src/tracker/tracker-endpoint.c:53 src/tracker/tracker-endpoint.c:57
msgid "NAME"
msgstr "NAME"
-#: src/tracker/tracker-endpoint.c:55
+#: src/tracker/tracker-endpoint.c:56
msgid "Specify the ontology name used in this endpoint"
msgstr "指定此端點使用的 ontology 名稱"
-#: src/tracker/tracker-endpoint.c:59
+#: src/tracker/tracker-endpoint.c:60
msgid "Specify a path to an ontology to be used in this endpoint"
msgstr "指定此端點要使用的 ontology 路徑"
-#: src/tracker/tracker-endpoint.c:63
+#: src/tracker/tracker-endpoint.c:64
msgid "Use session bus"
msgstr "使用工作階段匯流排"
-#: src/tracker/tracker-endpoint.c:67
+#: src/tracker/tracker-endpoint.c:68
msgid "Use system bus"
msgstr "使用系統匯流排"
+#: src/tracker/tracker-endpoint.c:72
+msgid "List SPARQL endpoints available in DBus"
+msgstr "列出 DBus 中可用的 SPARQL 端點"
+
+#. TRANSLATORS: these are commandline arguments
+#: src/tracker/tracker-endpoint.c:93
+msgid "--list can only be used with --session or --system"
+msgstr "--list 僅可以搭配 --session 或 --system 使用"
+
#. TRANSLATORS: those are commandline arguments
-#: src/tracker/tracker-endpoint.c:87
+#: src/tracker/tracker-endpoint.c:99
msgid "One “ontology” or “ontology-path” option should be provided"
msgstr "應該提供一個「ontology」或「ontology-path」選項"
-#: src/tracker/tracker-endpoint.c:129
+#: src/tracker/tracker-endpoint.c:141
#, c-format
msgid "Creating endpoint at %s…"
msgstr "建立位於 %s 的端點中…"
-#: src/tracker/tracker-endpoint.c:165
+#: src/tracker/tracker-endpoint.c:177
msgid "Could not own DBus name"
msgstr "無法擁有 DBus 名稱"
-#: src/tracker/tracker-endpoint.c:169
+#: src/tracker/tracker-endpoint.c:181
msgid "Listening to SPARQL commands. Press Ctrl-C to stop."
msgstr "聆聽 SPARQL 指令中。請按 Ctrl-C 停止。"
-#: src/tracker/tracker-endpoint.c:179
+#: src/tracker/tracker-endpoint.c:191
msgid "DBus name lost"
msgstr "DBus 名稱遺失"
#. Carriage return, so we paper over the ^C
-#: src/tracker/tracker-endpoint.c:184
+#: src/tracker/tracker-endpoint.c:196
msgid "Closing connection…"
msgstr "關閉連線中…"
-#: src/tracker/tracker-endpoint.c:204 src/tracker/tracker-export.c:231
-#: src/tracker/tracker-import.c:160 src/tracker/tracker-info.c:471
-#: src/tracker/tracker-sparql.c:1516 src/tracker/tracker-sql.c:231
-msgid "Unrecognized options"
-msgstr "無法辨識的選項"
-
-#: src/tracker/tracker-endpoint.c:234
+#: src/tracker/tracker-endpoint.c:333
#, c-format
msgid "Opening database at %s…"
msgstr "開啟位於 %s 的資料庫中…"
-#: src/tracker/tracker-endpoint.c:237
+#: src/tracker/tracker-endpoint.c:336
msgid "Creating in-memory database"
msgstr "建立記憶體內的資料庫"
-#: src/tracker/tracker-endpoint.c:257
+#: src/tracker/tracker-endpoint.c:356
msgid ""
-"New database created. Use the --dbus-service option to share this database "
+"New database created. Use the “--dbus-service” option to share this database "
"on a message bus."
-msgstr "已建立新資料庫。請使用 --dubs-service 選項來與訊息匯流排分享此資料庫。"
+msgstr ""
+"已建立新資料庫。請使用「--dubs-service」選項來與訊息匯流排分享此資料庫。"
-#: src/tracker/tracker-export.c:42 src/tracker/tracker-import.c:46
+#: src/tracker/tracker-export.c:48 src/tracker/tracker-import.c:46
#: src/tracker/tracker-import.c:57 src/tracker/tracker-import.c:58
-#: src/tracker/tracker-info.c:54 src/tracker/tracker-info.c:91
-#: src/tracker/tracker-info.c:92 src/tracker/tracker-sparql.c:108
-#: src/tracker/tracker-sparql.c:120 src/tracker/tracker-sql.c:45
-#: src/tracker/tracker-sql.c:49
+#: src/tracker/tracker-sparql.c:111 src/tracker/tracker-sparql.c:123
+#: src/tracker/tracker-sql.c:45 src/tracker/tracker-sql.c:49
msgid "FILE"
msgstr "FILE"
-#: src/tracker/tracker-export.c:45 src/tracker/tracker-import.c:49
-#: src/tracker/tracker-info.c:57 src/tracker/tracker-sparql.c:111
+#: src/tracker/tracker-export.c:51 src/tracker/tracker-import.c:49
+#: src/tracker/tracker-sparql.c:114
msgid "Connects to a DBus service"
msgstr "連接至 DBus 服務"
-#: src/tracker/tracker-export.c:46 src/tracker/tracker-import.c:50
-#: src/tracker/tracker-info.c:58 src/tracker/tracker-sparql.c:112
+#: src/tracker/tracker-export.c:52 src/tracker/tracker-import.c:50
+#: src/tracker/tracker-sparql.c:115
msgid "DBus service name"
msgstr "DBus 服務名稱"
-#: src/tracker/tracker-export.c:49 src/tracker/tracker-import.c:53
-#: src/tracker/tracker-info.c:61 src/tracker/tracker-sparql.c:115
+#: src/tracker/tracker-export.c:55 src/tracker/tracker-import.c:53
+#: src/tracker/tracker-sparql.c:118
msgid "Connects to a remote service"
msgstr "連接至遠端服務"
-#: src/tracker/tracker-export.c:50 src/tracker/tracker-import.c:54
-#: src/tracker/tracker-info.c:62 src/tracker/tracker-sparql.c:116
+#: src/tracker/tracker-export.c:56 src/tracker/tracker-import.c:54
+#: src/tracker/tracker-sparql.c:119
msgid "Remote service URI"
msgstr "遠端服務 URI"
+#: src/tracker/tracker-export.c:59
+msgid "Output TriG format which includes named graph information"
+msgstr "輸出 TriG 格式,它包含命名的圖表資訊"
+
+#: src/tracker/tracker-export.c:71 src/tracker/tracker-export.c:72
+#| msgid "DIR"
+msgid "IRI"
+msgstr "IRI"
+
#. TRANSLATORS: Those are commandline arguments
-#: src/tracker/tracker-export.c:76 src/tracker/tracker-import.c:83
-#: src/tracker/tracker-sparql.c:190
-msgid "Specify one --database, --dbus-service or --remote-service option"
-msgstr "指定 --database、--dbus-service、--remote-service 之一的選項"
+#: src/tracker/tracker-export.c:97 src/tracker/tracker-import.c:83
+#: src/tracker/tracker-sparql.c:199
+msgid "Specify one “--database”, “--dbus-service” or “--remote-service” option"
+msgstr "指定「--database」、「--dbus-service」、「--remote-service」之一的選項"
-#: src/tracker/tracker-export.c:186 src/tracker/tracker-import.c:99
-#: src/tracker/tracker-info.c:309 src/tracker/tracker-sparql.c:1105
+#: src/tracker/tracker-export.c:308 src/tracker/tracker-import.c:99
+#: src/tracker/tracker-sparql.c:1115
msgid "Could not establish a connection to Tracker"
msgstr "無法建立連線至 Tracker"
-#: src/tracker/tracker-export.c:187 src/tracker/tracker-import.c:100
-#: src/tracker/tracker-info.c:310 src/tracker/tracker-sparql.c:1106
+#: src/tracker/tracker-export.c:309 src/tracker/tracker-import.c:100
+#: src/tracker/tracker-sparql.c:1116
msgid "No error given"
msgstr "沒有錯誤訊息"
-#: src/tracker/tracker-export.c:206 src/tracker/tracker-sparql.c:1456
-#: src/tracker/tracker-sql.c:132 src/tracker/tracker-sql.c:165
+#: src/tracker/tracker-export.c:348 src/tracker/tracker-export.c:399
+#: src/tracker/tracker-export.c:412 src/tracker/tracker-export.c:422
+#: src/tracker/tracker-sparql.c:1493 src/tracker/tracker-sql.c:135
+#: src/tracker/tracker-sql.c:168
msgid "Could not run query"
msgstr "無法執行查詢"
@@ -226,190 +192,139 @@ msgstr "無法執行「%s」:%s"
msgid "Could not run import"
msgstr "無法執行匯入"
-#: src/tracker/tracker-info.c:65
-msgid "Show full namespaces (i.e. don’t use nie:title, use full URLs)"
-msgstr "顯示完整的命名空間 (例如:不使用 nie:title,使用完整 URL)"
-
-#: src/tracker/tracker-info.c:69
-msgid "Show plain text content if available for resources"
-msgstr "如果資源可用則顯示純文字內容"
-
-#. To translators:
-#. * IRI (International Resource Identifier) is a generalization
-#. * of the URI. While URI supports only ASCI encoding, IRI
-#. * fully supports international characters. In practice, UTF-8
-#. * is the most popular encoding used for IRI.
-#.
-#: src/tracker/tracker-info.c:79
-msgid ""
-"Instead of looking up a file name, treat the FILE arguments as actual IRIs "
-"(e.g. <file:///path/to/some/file.txt>)"
-msgstr ""
-"代替查詢檔案名稱,將 FILE 引數視為實際 IRI (例如:<file:///path/to/some/file."
-"txt>)"
-
-#: src/tracker/tracker-info.c:83
-msgid "Output results as RDF in Turtle format"
-msgstr "輸出結果為 Turtle 格式的 RDF"
+#: src/tracker/tracker-main.c:43
+msgid "See “tracker3 help <command>” to read about a specific subcommand."
+msgstr "請查閱「tracker3 help <command>」以了解指定子指令的資訊。"
-#: src/tracker/tracker-info.c:87
-msgid "RDF property to treat as URL (eg. “nie:url”)"
-msgstr "視為 URL 的 RDF 屬性(如「nie:url」)"
-
-#: src/tracker/tracker-info.c:334
-msgid "Querying information for entity"
-msgstr "項目的查詢資訊"
-
-#: src/tracker/tracker-info.c:358
-msgid "Unable to retrieve URN for URI"
-msgstr "無法取回 URI 的 URN"
-
-#: src/tracker/tracker-info.c:368 src/tracker/tracker-info.c:402
-msgid "Unable to retrieve data for URI"
-msgstr "無法取回 URI 的資料"
-
-#: src/tracker/tracker-info.c:411
-msgid "No metadata available for that URI"
-msgstr "沒有那個 URI 的中介資料可用"
-
-#: src/tracker/tracker-info.c:416 src/tracker/tracker-sparql.c:1468
-#: src/tracker/tracker-sparql.c:1471 src/tracker/tracker-sql.c:139
-msgid "Results"
-msgstr "結果"
-
-#: src/tracker/tracker-main.c:44
-msgid "See “tracker help <command>” to read about a specific subcommand."
-msgstr "請查閱「tracker help <command>」以了解特定子指令的資訊。"
-
-#: src/tracker/tracker-main.c:93
+#: src/tracker/tracker-main.c:92
msgid "Get help on how to use Tracker and any of these commands"
msgstr "取得如何使用 Tracker 與任何這些指令的協助"
-#: src/tracker/tracker-main.c:94
+#: src/tracker/tracker-main.c:93
msgid "Create a SPARQL endpoint"
msgstr "建立 SPARQL 端點"
-#: src/tracker/tracker-main.c:95
+#: src/tracker/tracker-main.c:94
msgid "Export data from a Tracker database"
msgstr "從 Tracker 資料庫中匯出資料"
-#: src/tracker/tracker-main.c:96
+#: src/tracker/tracker-main.c:95
msgid "Import data into a Tracker database"
msgstr "將資料匯入 Tracker 資料庫中"
-#: src/tracker/tracker-main.c:97
-msgid "Show information known about local files or items indexed"
-msgstr "顯示關於已索引本地端檔案或項目的已知資訊"
-
-#: src/tracker/tracker-main.c:98
+#: src/tracker/tracker-main.c:96
msgid ""
"Query and update the index using SPARQL or search, list and tree the ontology"
msgstr "使用 SPARQL 查詢與更新索引,或搜尋、列出資料本體的樹狀圖"
-#: src/tracker/tracker-main.c:99
+#: src/tracker/tracker-main.c:97
msgid "Query the database at the lowest level using SQL"
msgstr "使用 SQL 查詢最低階的資料庫"
-#: src/tracker/tracker-main.c:139
+#: src/tracker/tracker-main.c:137
#, c-format
-msgid "“%s” is not a tracker command. See “tracker --help”"
-msgstr "「%s」不是 tracker 指令。請查閱「tracker --help」"
+msgid "“%s” is not a tracker3 command. See “tracker3 --help”"
+msgstr "「%s」不是 tracker3 指令。請查閱「tracker3 --help」"
-#: src/tracker/tracker-main.c:174
-msgid "Available tracker commands are:"
-msgstr "可用的 tracker 指令有:"
+#: src/tracker/tracker-main.c:172
+msgid "Available tracker3 commands are:"
+msgstr "可用的 tracker3 指令有:"
-#: src/tracker/tracker-main.c:212
+#: src/tracker/tracker-main.c:210
msgid "Additional / third party commands are:"
msgstr "額外 / 第三方指令有:"
-#: src/tracker/tracker-sparql.c:119
+#: src/tracker/tracker-sparql.c:122
msgid "Path to use to run a query or update from file"
msgstr "用來執行查詢或從檔案更新的路徑"
-#: src/tracker/tracker-sparql.c:123
+#: src/tracker/tracker-sparql.c:126
msgid "SPARQL query"
msgstr "SPARQL 查詢"
-#: src/tracker/tracker-sparql.c:124
+#: src/tracker/tracker-sparql.c:127
msgid "SPARQL"
msgstr "SPARQL"
-#: src/tracker/tracker-sparql.c:127
+#: src/tracker/tracker-sparql.c:130
msgid "This is used with --query and for database updates only."
msgstr "這只能用於 --query 與資料庫的更新。"
-#: src/tracker/tracker-sparql.c:131
+#: src/tracker/tracker-sparql.c:134
msgid "Retrieve classes"
msgstr "取回類別"
-#: src/tracker/tracker-sparql.c:135
+#: src/tracker/tracker-sparql.c:138
msgid "Retrieve class prefixes"
msgstr "取回類別前綴"
-#: src/tracker/tracker-sparql.c:139
+#: src/tracker/tracker-sparql.c:142
msgid ""
"Retrieve properties for a class, prefixes can be used too (e.g. rdfs:"
"Resource)"
msgstr "取回類別的屬性,也可以使用前綴 (例如 rdfs:Resource)"
-#: src/tracker/tracker-sparql.c:140 src/tracker/tracker-sparql.c:144
-#: src/tracker/tracker-sparql.c:152 src/tracker/tracker-sparql.c:160
-#: src/tracker/tracker-sparql.c:164
+#: src/tracker/tracker-sparql.c:143 src/tracker/tracker-sparql.c:147
+#: src/tracker/tracker-sparql.c:159 src/tracker/tracker-sparql.c:167
+#: src/tracker/tracker-sparql.c:171
msgid "CLASS"
msgstr "CLASS"
-#: src/tracker/tracker-sparql.c:143
+#: src/tracker/tracker-sparql.c:146
msgid ""
"Retrieve classes which notify changes in the database (CLASS is optional)"
msgstr "取回資料庫中通知有變更的類別 (CLASS 是選擇性的)"
-#: src/tracker/tracker-sparql.c:147
+#: src/tracker/tracker-sparql.c:150
msgid ""
"Retrieve indexes used in database to improve performance (PROPERTY is "
"optional)"
msgstr "取回用於資料庫的索引以增進效能 (PROPERTY 為選用性)"
-#: src/tracker/tracker-sparql.c:148
+#: src/tracker/tracker-sparql.c:151
msgid "PROPERTY"
msgstr "PROPERTY"
-#: src/tracker/tracker-sparql.c:151
+#: src/tracker/tracker-sparql.c:154
+msgid "Retrieve all named graphs"
+msgstr "取回所有命名的圖表"
+
+#: src/tracker/tracker-sparql.c:158
msgid ""
"Describe subclasses, superclasses (can be used with -s to highlight parts of "
"the tree and -p to show properties)"
msgstr "描述子類別、母類別 (可以加上 -s 強調顯示樹狀部分,-p 可顯示屬性)"
-#: src/tracker/tracker-sparql.c:155
+#: src/tracker/tracker-sparql.c:162
msgid ""
"Search for a class or property and display more information (e.g. Document)"
msgstr "搜尋類別或屬性並顯示更多資訊 (例如:文件)"
-#: src/tracker/tracker-sparql.c:156
+#: src/tracker/tracker-sparql.c:163
msgid "CLASS/PROPERTY"
msgstr "CLASS/PROPERTY"
-#: src/tracker/tracker-sparql.c:159
+#: src/tracker/tracker-sparql.c:166
msgid "Returns the shorthand for a class (e.g. nfo:FileDataObject)."
msgstr "傳回某類別之縮寫 (例如 nfo:FileDataObject)。"
-#: src/tracker/tracker-sparql.c:163
+#: src/tracker/tracker-sparql.c:170
msgid "Returns the full namespace for a class."
msgstr "傳回類別的完整命名空間。"
-#: src/tracker/tracker-sparql.c:223
+#: src/tracker/tracker-sparql.c:232
msgid "Unable to retrieve namespace prefixes"
msgstr "無法取回命名空間前綴"
-#: src/tracker/tracker-sparql.c:231
+#: src/tracker/tracker-sparql.c:240
msgid "No namespace prefixes were returned"
msgstr "未傳回命名空間前綴"
-#: src/tracker/tracker-sparql.c:277
+#: src/tracker/tracker-sparql.c:286
msgid "Could not get namespace prefixes"
msgstr "無法取得命名空間前綴"
-#: src/tracker/tracker-sparql.c:286
+#: src/tracker/tracker-sparql.c:295
msgid "No namespace prefixes were found"
msgstr "找不到命名空間前綴"
@@ -417,124 +332,141 @@ msgstr "找不到命名空間前綴"
#. * search results found. We use a "foo: None"
#. * with multiple print statements, where "foo"
#. * may be Music or Images, etc.
-#: src/tracker/tracker-sparql.c:532 src/tracker/tracker-sparql.c:580
+#: src/tracker/tracker-sparql.c:541 src/tracker/tracker-sparql.c:589
msgid "None"
msgstr "沒有"
-#: src/tracker/tracker-sparql.c:986
+#: src/tracker/tracker-sparql.c:995
msgid "Could not create tree: subclass query failed"
msgstr "無法建立樹狀圖:子類別查詢失敗"
-#: src/tracker/tracker-sparql.c:1035
+#: src/tracker/tracker-sparql.c:1044
msgid "Could not create tree: class properties query failed"
msgstr "無法建立樹狀圖:類別屬性查詢失敗"
-#: src/tracker/tracker-sparql.c:1119
+#: src/tracker/tracker-sparql.c:1131
msgid "Could not list classes"
msgstr "無法列出類別"
-#: src/tracker/tracker-sparql.c:1127
+#: src/tracker/tracker-sparql.c:1139
msgid "No classes were found"
msgstr "找不到類別"
-#: src/tracker/tracker-sparql.c:1127 src/tracker/tracker-sparql.c:1318
+#: src/tracker/tracker-sparql.c:1139 src/tracker/tracker-sparql.c:1355
msgid "Classes"
msgstr "類別"
-#: src/tracker/tracker-sparql.c:1143
+#: src/tracker/tracker-sparql.c:1155
msgid "Could not list class prefixes"
msgstr "無法列出類別前綴"
-#: src/tracker/tracker-sparql.c:1151
+#: src/tracker/tracker-sparql.c:1163
msgid "No class prefixes were found"
msgstr "找不到類別前綴"
-#: src/tracker/tracker-sparql.c:1151
+#: src/tracker/tracker-sparql.c:1163
msgid "Prefixes"
msgstr "前綴"
-#: src/tracker/tracker-sparql.c:1171
+#: src/tracker/tracker-sparql.c:1183
msgid ""
"Could not find property for class prefix, e.g. :Resource in “rdfs:Resource”"
msgstr "找不到類別前綴,例如:「rdfs:Resource」中的資源"
-#: src/tracker/tracker-sparql.c:1210
+#: src/tracker/tracker-sparql.c:1222
msgid "Could not list properties"
msgstr "無法列出屬性"
-#: src/tracker/tracker-sparql.c:1218
+#: src/tracker/tracker-sparql.c:1230
msgid "No properties were found"
msgstr "找不到屬性"
-#: src/tracker/tracker-sparql.c:1218 src/tracker/tracker-sparql.c:1341
+#: src/tracker/tracker-sparql.c:1230 src/tracker/tracker-sparql.c:1378
msgid "Properties"
msgstr "屬性"
-#: src/tracker/tracker-sparql.c:1246
+#: src/tracker/tracker-sparql.c:1258
msgid "Could not find notify classes"
msgstr "找不到通知類別"
-#: src/tracker/tracker-sparql.c:1254
+#: src/tracker/tracker-sparql.c:1266
msgid "No notifies were found"
msgstr "找不到通知"
-#: src/tracker/tracker-sparql.c:1254
+#: src/tracker/tracker-sparql.c:1266
msgid "Notifies"
msgstr "通知"
-#: src/tracker/tracker-sparql.c:1280
+#: src/tracker/tracker-sparql.c:1292
msgid "Could not find indexed properties"
msgstr "找不到索引的屬性"
-#: src/tracker/tracker-sparql.c:1288
+#: src/tracker/tracker-sparql.c:1300
msgid "No indexes were found"
msgstr "找不到索引"
-#: src/tracker/tracker-sparql.c:1288
+#: src/tracker/tracker-sparql.c:1300
msgid "Indexes"
msgstr "索引"
-#: src/tracker/tracker-sparql.c:1310
+#: src/tracker/tracker-sparql.c:1316
+msgid "Could not list named graphs"
+msgstr "無法列出命名的圖表"
+
+#: src/tracker/tracker-sparql.c:1324
+msgid "No graphs were found"
+msgstr "找不到圖表"
+
+#: src/tracker/tracker-sparql.c:1324
+msgid "Named graphs"
+msgstr "命名的圖表"
+
+#: src/tracker/tracker-sparql.c:1347
msgid "Could not search classes"
msgstr "無法搜尋類別"
-#: src/tracker/tracker-sparql.c:1318
+#: src/tracker/tracker-sparql.c:1355
msgid "No classes were found to match search term"
msgstr "找不到符合搜尋語詞的類別"
-#: src/tracker/tracker-sparql.c:1333
+#: src/tracker/tracker-sparql.c:1370
msgid "Could not search properties"
msgstr "無法搜尋屬性"
-#: src/tracker/tracker-sparql.c:1341
+#: src/tracker/tracker-sparql.c:1378
msgid "No properties were found to match search term"
msgstr "找不到符合搜尋語詞的屬性"
-#: src/tracker/tracker-sparql.c:1377 src/tracker/tracker-sql.c:70
+#: src/tracker/tracker-sparql.c:1414 src/tracker/tracker-sql.c:70
msgid "Could not get UTF-8 path from path"
msgstr "無法從路徑取得 UTF-8 路徑"
-#: src/tracker/tracker-sparql.c:1389 src/tracker/tracker-sql.c:81
+#: src/tracker/tracker-sparql.c:1426 src/tracker/tracker-sql.c:81
msgid "Could not read file"
msgstr "無法讀取檔案"
-#: src/tracker/tracker-sparql.c:1408
+#: src/tracker/tracker-sparql.c:1445
msgid "Could not run update"
msgstr "無法執行更新"
-#: src/tracker/tracker-sparql.c:1415
+#: src/tracker/tracker-sparql.c:1452
msgid "Done"
msgstr "完成"
-#: src/tracker/tracker-sparql.c:1468 src/tracker/tracker-sparql.c:1471
+#: src/tracker/tracker-sparql.c:1506 src/tracker/tracker-sparql.c:1509
msgid "No results found matching your query"
msgstr "找不到符合您查詢的結果"
-#: src/tracker/tracker-sparql.c:1525 src/tracker/tracker-sql.c:242
+#: src/tracker/tracker-sparql.c:1506 src/tracker/tracker-sparql.c:1509
+#: src/tracker/tracker-sql.c:142
+msgid "Results"
+msgstr "結果"
+
+#: src/tracker/tracker-sparql.c:1566 src/tracker/tracker-sql.c:248
msgid "File and query can not be used together"
msgstr "檔案與查詢不能同時使用"
-#: src/tracker/tracker-sparql.c:1527
+#: src/tracker/tracker-sparql.c:1568
msgid ""
"The --list-properties argument can only be empty when used with the --tree "
"argument"
@@ -552,18 +484,86 @@ msgstr "SQL 查詢"
msgid "SQL"
msgstr "SQL"
-#: src/tracker/tracker-sql.c:113
+#: src/tracker/tracker-sql.c:114
msgid "Failed to initialize data manager"
msgstr "無法初始化資料管理員"
-#: src/tracker/tracker-sql.c:173
+#: src/tracker/tracker-sql.c:176
msgid "Empty result set"
msgstr "清空結果"
-#: src/tracker/tracker-sql.c:240
+#: src/tracker/tracker-sql.c:246
msgid "A database path must be specified"
msgstr "必須指定資料庫路徑"
+#~ msgid "unknown time"
+#~ msgstr "不明的時間"
+
+#~ msgid "less than one second"
+#~ msgstr "少於一秒"
+
+#~ msgid " %dd"
+#~ msgstr " %d天"
+
+#~ msgid " %2.2dh"
+#~ msgstr " %2.2d時"
+
+#~ msgid " %2.2dm"
+#~ msgstr " %2.2d分"
+
+#~ msgid " %2.2ds"
+#~ msgstr " %2.2d秒"
+
+#~ msgid " %d day"
+#~ msgid_plural " %d days"
+#~ msgstr[0] " %d 天"
+
+#~ msgid " %2.2d hour"
+#~ msgid_plural " %2.2d hours"
+#~ msgstr[0] " %2.2d 小時"
+
+#~ msgid " %2.2d minute"
+#~ msgid_plural " %2.2d minutes"
+#~ msgstr[0] " %2.2d 分鐘"
+
+#~ msgid " %2.2d second"
+#~ msgid_plural " %2.2d seconds"
+#~ msgstr[0] " %2.2d 秒"
+
+#~ msgid "Show full namespaces (i.e. don’t use nie:title, use full URLs)"
+#~ msgstr "顯示完整的命名空間 (例如:不使用 nie:title,使用完整 URL)"
+
+#~ msgid "Show plain text content if available for resources"
+#~ msgstr "如果資源可用則顯示純文字內容"
+
+#~ msgid ""
+#~ "Instead of looking up a file name, treat the FILE arguments as actual "
+#~ "IRIs (e.g. <file:///path/to/some/file.txt>)"
+#~ msgstr ""
+#~ "代替查詢檔案名稱,將 FILE 引數視為實際 IRI (例如:<file:///path/to/some/"
+#~ "file.txt>)"
+
+#~ msgid "Output results as RDF in Turtle format"
+#~ msgstr "輸出結果為 Turtle 格式的 RDF"
+
+#~ msgid "RDF property to treat as URL (eg. “nie:url”)"
+#~ msgstr "視為 URL 的 RDF 屬性(如「nie:url」)"
+
+#~ msgid "Querying information for entity"
+#~ msgstr "項目的查詢資訊"
+
+#~ msgid "Unable to retrieve URN for URI"
+#~ msgstr "無法取回 URI 的 URN"
+
+#~ msgid "Unable to retrieve data for URI"
+#~ msgstr "無法取回 URI 的資料"
+
+#~ msgid "No metadata available for that URI"
+#~ msgstr "沒有那個 URI 的中介資料可用"
+
+#~ msgid "Show information known about local files or items indexed"
+#~ msgstr "顯示關於已索引本地端檔案或項目的已知資訊"
+
#~ msgid "Maximum size of journal"
#~ msgstr "日誌最大容量"
@@ -1303,9 +1303,6 @@ msgstr "必須指定資料庫路徑"
#~ msgid "Statistics:"
#~ msgstr "統計:"
-#~ msgid "Version"
-#~ msgstr "版本"
-
#~ msgid "Disk Information"
#~ msgstr "磁碟資訊"
@@ -1421,9 +1418,6 @@ msgstr "必須指定資料庫路徑"
#~ msgid "Could not get all tags"
#~ msgstr "無法取得所有的標籤"
-#~ msgid "No tags were found"
-#~ msgstr "找不到標籤"
-
#~ msgid "Tags (shown by name)"
#~ msgstr "標籤 (依名稱顯示)"
diff --git a/src/libtracker-common/tracker-date-time.c b/src/libtracker-common/tracker-date-time.c
index 03ee078d5..003239f6a 100644
--- a/src/libtracker-common/tracker-date-time.c
+++ b/src/libtracker-common/tracker-date-time.c
@@ -222,7 +222,7 @@ tracker_date_to_string (gdouble date_time,
gmtime_r (&seconds, &utc_time);
/* Output is ISO 8601 format : "YYYY-MM-DDThh:mm:ss" */
- count = strftime (buffer, sizeof (buffer), "%FT%T", &utc_time);
+ count = strftime (buffer, sizeof (buffer), "%4Y-%m-%dT%T", &utc_time);
/* Append milliseconds (if non-zero) and time zone */
if (milliseconds > 0) {
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index a5e077041..bbb4d2e0e 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -1781,7 +1781,7 @@ load_ontology_file (TrackerDataManager *manager,
while (tracker_turtle_reader_next (reader,
&subject, &predicate, &object,
- NULL, &ttl_error)) {
+ NULL, NULL, &ttl_error)) {
GError *ontology_error = NULL;
tracker_data_ontology_load_statement (manager, ontology_uri,
@@ -1829,7 +1829,7 @@ get_ontology_from_file (TrackerDataManager *manager,
while (tracker_turtle_reader_next (reader,
&subject, &predicate, &object,
- NULL, &error)) {
+ NULL, NULL, &error)) {
if (g_strcmp0 (predicate, RDF_TYPE) == 0) {
if (g_strcmp0 (object, TRACKER_PREFIX_NRL "Ontology") == 0) {
TrackerOntology *ontology;
@@ -2007,7 +2007,7 @@ import_ontology_file (TrackerDataManager *manager,
while (tracker_turtle_reader_next (reader,
&subject, &predicate, &object,
- NULL, &error)) {
+ NULL, NULL, &error)) {
tracker_data_ontology_process_statement (manager,
subject, predicate, object,
in_update);
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index f5c1c2af8..4b558d271 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -2675,7 +2675,7 @@ tracker_data_load_turtle_file (TrackerData *data,
{
TrackerTurtleReader *reader = NULL;
GError *inner_error = NULL;
- const gchar *subject, *predicate, *object_str;
+ const gchar *subject, *predicate, *object_str, *langtag;
gboolean object_is_uri;
reader = tracker_turtle_reader_new_for_file (file, &inner_error);
@@ -2686,11 +2686,12 @@ tracker_data_load_turtle_file (TrackerData *data,
&subject,
&predicate,
&object_str,
+ &langtag,
&object_is_uri,
&inner_error)) {
GBytes *object;
- object = g_bytes_new (object_str, strlen (object_str) + 1);
+ object = tracker_sparql_make_langstring (object_str, langtag);
if (object_is_uri) {
tracker_data_insert_statement_with_uri (data, graph,
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 23b7b7967..c6a20a84c 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -530,7 +530,7 @@ function_sparql_time_sort (sqlite3_context *context,
time = tracker_string_to_date (value, NULL, &error);
if (error) {
- result_context_function_error (context, fn, "Failed time string conversion");
+ result_context_function_error (context, fn, error->message);
g_error_free (error);
return;
}
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index 2ff43d045..7beedd0a0 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -21,6 +21,8 @@
#include "config.h"
#include <glib-object.h>
+#include <math.h>
+
#include "tracker-data-query.h"
#include "tracker-string-builder.h"
#include "tracker-sparql.h"
@@ -8746,20 +8748,9 @@ translate_RDFLiteral (TrackerSparql *sparql,
if (is_parameter) {
binding = tracker_parameter_binding_new (str, NULL);
} else {
- GString *langstr;
GBytes *bytes;
- langstr = g_string_new (str);
-
- if (langtag) {
- g_string_append_c (langstr, '\0');
- g_string_append_printf (langstr, "%s", &langtag[1]);
- }
-
- bytes = g_bytes_new_take (langstr->str,
- langstr->len + 1);
- g_string_free (langstr, FALSE);
-
+ bytes = tracker_sparql_make_langstring (str, langtag);
binding = tracker_literal_binding_new (bytes, NULL);
g_bytes_unref (bytes);
}
@@ -9369,29 +9360,41 @@ prepare_query (TrackerSparql *sparql,
return NULL;
}
} else if (prop_type == TRACKER_PROPERTY_TYPE_DATE) {
+ GError *inner_error = NULL;
gchar *full_str;
gdouble datetime;
full_str = g_strdup_printf ("%sT00:00:00Z", binding->literal);
- datetime = tracker_string_to_date (full_str, NULL, error);
+ datetime = tracker_string_to_date (full_str, NULL, &inner_error);
g_free (full_str);
- if (datetime < 0) {
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
g_object_unref (stmt);
return NULL;
}
tracker_db_statement_bind_int (stmt, i, (int) datetime);
} else if (prop_type == TRACKER_PROPERTY_TYPE_DATETIME) {
+ GError *inner_error = NULL;
gdouble datetime;
+ gint offset = 0;
- datetime = tracker_string_to_date (binding->literal, NULL, error);
- if (datetime < 0) {
+ datetime = tracker_string_to_date (binding->literal, offset, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
g_object_unref (stmt);
return NULL;
}
- tracker_db_statement_bind_double (stmt, i, datetime);
+ /* If we have anything that prevents a unix timestamp to be
+ * lossless, we use the ISO8601 string.
+ */
+ if (offset != 0 || floor (datetime) != datetime) {
+ tracker_db_statement_bind_text (stmt, i, binding->literal);
+ } else {
+ tracker_db_statement_bind_int (stmt, i, datetime);
+ }
} else if (prop_type == TRACKER_PROPERTY_TYPE_INTEGER) {
tracker_db_statement_bind_int (stmt, i, atoi (binding->literal));
} else if (prop_type == TRACKER_PROPERTY_TYPE_LANGSTRING &&
@@ -9566,3 +9569,24 @@ tracker_sparql_execute_update (TrackerSparql *sparql,
return NULL;
}
+
+GBytes *
+tracker_sparql_make_langstring (const gchar *str,
+ const gchar *langtag)
+{
+ GString *langstr;
+ GBytes *bytes;
+
+ langstr = g_string_new (str);
+
+ if (langtag) {
+ g_string_append_c (langstr, '\0');
+ g_string_append_printf (langstr, "%s", &langtag[1]);
+ }
+
+ bytes = g_bytes_new_take (langstr->str,
+ langstr->len + 1);
+ g_string_free (langstr, FALSE);
+
+ return bytes;
+}
diff --git a/src/libtracker-data/tracker-sparql.h b/src/libtracker-data/tracker-sparql.h
index e86665c51..57651de1a 100644
--- a/src/libtracker-data/tracker-sparql.h
+++ b/src/libtracker-data/tracker-sparql.h
@@ -45,4 +45,7 @@ GVariant * tracker_sparql_execute_update (TrackerSparql *sparql,
gboolean blank,
GError **error);
+GBytes * tracker_sparql_make_langstring (const gchar *str,
+ const gchar *langtag);
+
#endif /* __TRACKER_SPARQL_H__ */
diff --git a/src/libtracker-data/tracker-turtle-reader.c b/src/libtracker-data/tracker-turtle-reader.c
index 545d95475..50cde79b4 100644
--- a/src/libtracker-data/tracker-turtle-reader.c
+++ b/src/libtracker-data/tracker-turtle-reader.c
@@ -55,6 +55,7 @@ struct _TrackerTurtleReader {
gchar *subject;
gchar *predicate;
gchar *object;
+ gchar *object_lang;
gboolean object_is_uri;
ParserState state;
};
@@ -229,6 +230,7 @@ pop_stack (TrackerTurtleReader *reader)
/* Restore the old subject as current object */
reader->object = s;
reader->object_is_uri = TRUE;
+ g_clear_pointer (&reader->object_lang, g_free);
s = NULL;
} else if (reader->state == STATE_SUBJECT) {
g_clear_pointer (&reader->subject, g_free);
@@ -294,6 +296,8 @@ parse_terminal (TrackerTurtleReader *reader,
if (out)
*out = str;
+ else
+ g_free (str);
return TRUE;
}
@@ -484,7 +488,7 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader,
GError **error)
{
while (TRUE) {
- gchar *str;
+ gchar *str, *lang;
advance_whitespace (reader);
@@ -563,6 +567,7 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader,
break;
case STATE_OBJECT:
g_clear_pointer (&reader->object, g_free);
+ g_clear_pointer (&reader->object_lang, g_free);
reader->object_is_uri = FALSE;
if (parse_token (reader, "[")) {
@@ -585,18 +590,24 @@ tracker_turtle_reader_iterate_next (TrackerTurtleReader *reader,
reader->object = generate_bnode (reader, str);
reader->object_is_uri = TRUE;
g_free (str);
- } else if (parse_terminal (reader, terminal_STRING_LITERAL1, 1, &str) ||
- parse_terminal (reader, terminal_STRING_LITERAL2, 1, &str)) {
- reader->object = g_strcompress (str);
- g_free (str);
- if (!handle_type_cast (reader, error))
- return FALSE;
} else if (parse_terminal (reader, terminal_STRING_LITERAL_LONG1, 3, &str) ||
parse_terminal (reader, terminal_STRING_LITERAL_LONG2, 3, &str)) {
reader->object = g_strcompress (str);
g_free (str);
- if (!handle_type_cast (reader, error))
- return FALSE;
+ if (parse_terminal (reader, terminal_LANGTAG, 0, &lang)) {
+ reader->object_lang = lang;
+ } else if (!handle_type_cast (reader, error)) {
+ return FALSE;
+ }
+ } else if (parse_terminal (reader, terminal_STRING_LITERAL1, 1, &str) ||
+ parse_terminal (reader, terminal_STRING_LITERAL2, 1, &str)) {
+ reader->object = g_strcompress (str);
+ g_free (str);
+ if (parse_terminal (reader, terminal_LANGTAG, 0, &lang)) {
+ reader->object_lang = lang;
+ } else if (!handle_type_cast (reader, error)) {
+ return FALSE;
+ }
} else if (parse_terminal (reader, terminal_DOUBLE, 0, &str) ||
parse_terminal (reader, terminal_INTEGER, 0, &str)) {
reader->object = str;
@@ -658,6 +669,7 @@ tracker_turtle_reader_next (TrackerTurtleReader *reader,
const gchar **subject,
const gchar **predicate,
const gchar **object,
+ const gchar **object_lang,
gboolean *object_is_uri,
GError **error)
{
diff --git a/src/libtracker-data/tracker-turtle-reader.h b/src/libtracker-data/tracker-turtle-reader.h
index 892d2c46a..2d7846bf0 100644
--- a/src/libtracker-data/tracker-turtle-reader.h
+++ b/src/libtracker-data/tracker-turtle-reader.h
@@ -38,6 +38,7 @@ gboolean tracker_turtle_reader_next (TrackerTurtleReader *reader,
const gchar **subject,
const gchar **predicate,
const gchar **object,
+ const gchar **object_lang,
gboolean *object_is_uri,
GError **error);
diff --git a/tests/functional-tests/test-data/test-movie.ttl b/tests/functional-tests/test-data/test-movie.ttl
index 6e2483341..e7a3a3303 100644
--- a/tests/functional-tests/test-data/test-movie.ttl
+++ b/tests/functional-tests/test-data/test-movie.ttl
@@ -7,6 +7,7 @@ _:3 a nfo:FileHash ;
nfo:hashAlgorithm "gibest" .
<file:///home/sam/Videos/My%20Movie.avi> a nmm:Video , nfo:FileDataObject ;
+ nie:title """It"""@en ;
nfo:frameRate 25 ;
nfo:channels 2 ;
nfo:hasHash _:3 ;
diff --git a/tests/libtracker-data/datetime/data-4.rq b/tests/libtracker-data/datetime/data-4.rq
new file mode 100644
index 000000000..0cd6f339b
--- /dev/null
+++ b/tests/libtracker-data/datetime/data-4.rq
@@ -0,0 +1,4 @@
+INSERT {
+ example:x a example:A ;
+ example:p "0100-12-31T21:00:00-03:00"
+}
diff --git a/tests/libtracker-data/datetime/direct-1.out b/tests/libtracker-data/datetime/direct-1.out
new file mode 100644
index 000000000..566938b9d
--- /dev/null
+++ b/tests/libtracker-data/datetime/direct-1.out
@@ -0,0 +1 @@
+"0000-01-01T00:00:00Z" "2020-01-01T00:00:00Z" "9999-01-01T00:00:00Z"
diff --git a/tests/libtracker-data/datetime/direct-1.rq b/tests/libtracker-data/datetime/direct-1.rq
new file mode 100644
index 000000000..51de51070
--- /dev/null
+++ b/tests/libtracker-data/datetime/direct-1.rq
@@ -0,0 +1 @@
+SELECT ("0000-01-01T00:00:00Z"^^xsd:dateTime AS ?d1) ("2020-01-01T00:00:00Z"^^xsd:dateTime AS ?d2) ("9999-01-01T00:00:00Z"^^xsd:dateTime AS ?d3) {} \ No newline at end of file
diff --git a/tests/libtracker-data/datetime/insert-1.out b/tests/libtracker-data/datetime/insert-1.out
new file mode 100644
index 000000000..7dcd21192
--- /dev/null
+++ b/tests/libtracker-data/datetime/insert-1.out
@@ -0,0 +1 @@
+"http://example/x" "0100-12-31T21:00:00-03:00"
diff --git a/tests/libtracker-data/datetime/insert-1.rq b/tests/libtracker-data/datetime/insert-1.rq
new file mode 100644
index 000000000..6c2e0a01c
--- /dev/null
+++ b/tests/libtracker-data/datetime/insert-1.rq
@@ -0,0 +1,4 @@
+SELECT ?s ?v
+WHERE {
+ ?s example:p ?v
+}
diff --git a/tests/libtracker-data/tracker-sparql-test.c b/tests/libtracker-data/tracker-sparql-test.c
index 4024e105a..9f4d68fc9 100644
--- a/tests/libtracker-data/tracker-sparql-test.c
+++ b/tests/libtracker-data/tracker-sparql-test.c
@@ -92,7 +92,9 @@ const TestInfo tests[] = {
{ "construct/construct-where", "construct/data", FALSE },
{ "construct/construct-pattern", "construct/data", FALSE },
{ "construct/construct-with-modifiers", "construct/data", FALSE },
+ { "datetime/direct-1", "datetime/data-1", FALSE },
{ "datetime/delete-1", "datetime/data-3", FALSE },
+ { "datetime/insert-1", "datetime/data-4", FALSE },
{ "datetime/functions-localtime-1", "datetime/data-1", FALSE },
{ "datetime/functions-timezone-1", "datetime/data-2", FALSE },
{ "datetime/functions-timezone-2", "datetime/data-2", FALSE },