diff options
-rw-r--r-- | docs/tools/ttl_loader.c | 4 | ||||
-rw-r--r-- | docs/website/overview.md | 38 | ||||
-rw-r--r-- | meson_options.txt | 2 | ||||
-rw-r--r-- | po/zh_TW.po | 478 | ||||
-rw-r--r-- | src/libtracker-common/tracker-date-time.c | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 6 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 5 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-sparql.c | 58 | ||||
-rw-r--r-- | src/libtracker-data/tracker-sparql.h | 3 | ||||
-rw-r--r-- | src/libtracker-data/tracker-turtle-reader.c | 30 | ||||
-rw-r--r-- | src/libtracker-data/tracker-turtle-reader.h | 1 | ||||
-rw-r--r-- | tests/functional-tests/test-data/test-movie.ttl | 1 | ||||
-rw-r--r-- | tests/libtracker-data/datetime/data-4.rq | 4 | ||||
-rw-r--r-- | tests/libtracker-data/datetime/direct-1.out | 1 | ||||
-rw-r--r-- | tests/libtracker-data/datetime/direct-1.rq | 1 | ||||
-rw-r--r-- | tests/libtracker-data/datetime/insert-1.out | 1 | ||||
-rw-r--r-- | tests/libtracker-data/datetime/insert-1.rq | 4 | ||||
-rw-r--r-- | tests/libtracker-data/tracker-sparql-test.c | 2 |
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 }, |