概述
這個(gè)新手指南會(huì)讓你熟悉 ArangoDB。我們將介紹,
安裝并運(yùn)行一個(gè)本地 ArangoDB 服務(wù)器使用Web界面與之交互將示例數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)庫(kù)以再次檢索數(shù)據(jù)編輯和刪除現(xiàn)有數(shù)據(jù)安裝
去?arangodb.com/download,選擇您的操作系統(tǒng)并下載 ArangoDB。如果有包管理器,你也可以參考說(shuō)明如何通過(guò)包管理器進(jìn)行安裝。
在 Linux 下如果您安裝了二進(jìn)制包,服務(wù)器會(huì)自動(dòng)啟動(dòng)。
在 MacOS X 下,如果你用包管理器?homebrew?安裝 ArangoDB,通過(guò)命令啟動(dòng)服務(wù),/usr/local/sbin/arangod.
在 Windows 下把 ArangoDB 安裝為服務(wù),它會(huì)自動(dòng)啟動(dòng)。未安裝為服務(wù)的情況下,需要運(yùn)行位于安裝目錄中的 bin 目錄下的?arangod.exe。你可能必須以管理員身份運(yùn)行,以獲得對(duì) C:\Program Files 目錄的寫(xiě)權(quán)限。
關(guān)于安裝 ArangoDB 更深入的信息,以及可用的啟動(dòng)參數(shù),在集群中安裝等,參閱安裝文檔。
保護(hù)安裝
默認(rèn)安裝包含?_system?數(shù)據(jù)庫(kù)和?root?用戶。
基于 Debian 的軟件包和 Winsows Installer 都會(huì)在安裝過(guò)程中詢問(wèn)密碼?;?RedHat 的軟件包則會(huì)設(shè)置一個(gè)隨機(jī)密碼。對(duì)于其它安裝包,你需要執(zhí)行
shell> arango-secure-installation
這會(huì)要求輸入一個(gè) root 密碼并保存起來(lái)。
Web 界面
服務(wù)本身(arangod)是基于 HTTP/REST 的,但是你可以使用圖形化的 Web 界面讓操作變得簡(jiǎn)單。還有?arangosh,一個(gè)異步 shell,用來(lái)與服務(wù)器進(jìn)行交互。如果你是開(kāi)發(fā)者,你可能更喜歡使用 shell 而不是 GUI。目前它還沒(méi)有提供像語(yǔ)法高亮這樣的功能。
在項(xiàng)目中開(kāi)始使用 ArangoDB 的時(shí)候,你會(huì)尋找官方或社區(qū)使用與項(xiàng)目相同語(yǔ)言編寫(xiě)的驅(qū)動(dòng)。驅(qū)動(dòng)實(shí)現(xiàn)了可以在項(xiàng)目編程語(yǔ)言中輕松使用的編程接口,與服務(wù)器進(jìn)行完全地交互。因此,除非你想自己寫(xiě)驅(qū)動(dòng)或者直接使用原始接口,否則理所當(dāng)然地,應(yīng)該忽略 HTTP API。
為了熟悉數(shù)據(jù)庫(kù)系統(tǒng)你可以將驅(qū)動(dòng)放置一邊而使用 web 界面 (代碼名?Aardvark) 進(jìn)行基本交互. web 界面將會(huì)在你啟動(dòng)?arangod?之后變?yōu)榭捎? 你可以在瀏覽器中通過(guò)?http://localhost:8529?進(jìn)行訪問(wèn) – 如果不可以,請(qǐng)查看?故障排除.
默認(rèn)情況下, 驗(yàn)證已啟用. 默認(rèn)用戶為?root. 依據(jù)所用的安裝方法,安裝過(guò)程會(huì)提示輸入 root 密碼或者默認(rèn) root 密碼為空 (參看?以上).
接下來(lái)你會(huì)被詢問(wèn)使用哪個(gè)數(shù)據(jù)庫(kù)。所有的服務(wù)器實(shí)例帶有一個(gè)?_system?數(shù)據(jù)庫(kù). 選擇該數(shù)據(jù)庫(kù)并繼續(xù).
然后你會(huì)看到如下的服務(wù)器統(tǒng)計(jì)面板:
要了解關(guān)于接口的更詳細(xì)描述,參看?Web Interface.
數(shù)據(jù)庫(kù),集合與文檔
數(shù)據(jù)庫(kù)是集合的集合. 集合存儲(chǔ)記錄, 記錄被稱為文檔. 集合等價(jià)于 RDBMS 中的表, 而文檔可以被認(rèn)為是表中的行. 區(qū)別在于你不需要預(yù)先定義有哪些列 (或者屬性). 任意集合中的所有文檔可以擁有任意的屬性鍵與值. 然而實(shí)際上一個(gè)集合中的文檔具有相似的結(jié)構(gòu), 但是數(shù)據(jù)庫(kù)系統(tǒng)本身并不會(huì)關(guān)心,無(wú)論你的數(shù)據(jù)是什么樣子,數(shù)據(jù)庫(kù)系統(tǒng)都會(huì)在其上執(zhí)行穩(wěn)定而快速的操作.
在?數(shù)據(jù)模型概念?章節(jié)中可以閱讀更多內(nèi)容.
現(xiàn)在你可以停留在默認(rèn)的?_system?數(shù)據(jù)庫(kù)中并使用 web 接口來(lái)創(chuàng)建集合與文檔. 點(diǎn)擊?COLLECTIONS?菜單項(xiàng), 然后選擇?Add Collection?菜單. 為其指定一個(gè)名字,例如?users, 保持其他的設(shè)置不變 (我們希望它是一個(gè)文檔集合) 并保存. 會(huì)出現(xiàn)一個(gè)標(biāo)記為?users?的新菜單項(xiàng), 你可以點(diǎn)擊打開(kāi).
目錄還沒(méi)有任何文檔. 點(diǎn)擊右側(cè)帶有白色加號(hào)的綠色圓環(huán)來(lái)創(chuàng)建該集合中的第一個(gè)文檔. 對(duì)話框會(huì)詢問(wèn)你?_key. 你可以將該區(qū)域留空并點(diǎn)擊?Create?來(lái)讓數(shù)據(jù)據(jù)系統(tǒng)賦值一個(gè)自動(dòng)生成 (唯一) 的鍵. 注意?_key?屬性是不可修改的, 這意味著一旦文檔被創(chuàng)建你不可以修改該鍵. 你可以用作文檔鍵的內(nèi)容在命名約定?中有相應(yīng)的描述.
在這種情況下,自動(dòng)生成的鍵值也許是?“9883”?(_key?總是字符串!), 而文檔?_id?也許是?“users/9883”?. 除了一些系統(tǒng)屬性,在文檔中并沒(méi)有其他內(nèi)容. 讓我們通過(guò)點(diǎn)擊?(空對(duì)象)?左側(cè)的圖標(biāo)添加一個(gè)自定義屬性, 然后 添加. 兩個(gè)文本輸入框會(huì)變得可用,?FIELD?(屬性鍵) 與?VALUE?(屬性值). 輸入名字作為鍵,輸入你的名字作為值.?添加?另一個(gè)屬性,將其命名為年齡,并將其設(shè)置為你的年齡. 點(diǎn)擊保存來(lái)保存這些修改. 如果你點(diǎn)擊 ArangoDB 圖標(biāo)右側(cè)頂點(diǎn)的集合: users?, 文檔瀏覽器將會(huì)顯示?users?集合中的文檔,而你可以在列表中看到你剛剛創(chuàng)建的文檔.
查詢數(shù)據(jù)庫(kù)
是時(shí)候通過(guò)AQL(ArangoDB’ query language)ArangoDB查詢語(yǔ)言來(lái)取得我們的文檔了。我們可以直接通過(guò)我們創(chuàng)建的_id屬性查找文檔(當(dāng)然我們還可以使用其它選項(xiàng))。點(diǎn)擊QUERIES菜單欄來(lái)顯示query editor(查詢編輯器)輸入以下的內(nèi)容(具體取決于你的document ID):
RETURN DOCUMENT("users/9883")
然后點(diǎn)擊Execute來(lái)啟動(dòng)查詢,結(jié)果如下所示:
[ { "_key": "9883", "_id": "users/9883", "_rev": "9883", "age": 32, "name": "John Smith" }]
結(jié)果出現(xiàn)在編輯器下方。如你所見(jiàn),程序返回了整個(gè)文檔,包含著系統(tǒng)屬性。DOCUMENT()?函數(shù)會(huì)根據(jù)你提供的_keys或者_(dá)ids返回一系列或者單個(gè)文檔。我們管返回的結(jié)果叫做查詢結(jié)果,它是一個(gè)數(shù)組,包含了我們的文檔查詢結(jié)果(我們可能會(huì)得到不只一個(gè)文檔,但是即使只有一個(gè)文檔結(jié)果,它仍然會(huì)返回最上層的數(shù)組)。
這種類型的查詢稱為數(shù)據(jù)訪問(wèn)查詢。這種查詢不會(huì)創(chuàng)建、更改或刪除數(shù)據(jù)。還有另一種類型的查詢,稱為數(shù)據(jù)修改查詢。讓我們使用修改查詢插入第二個(gè)文檔:
INSERT { name: "Katie Foster", age: 27 } INTO users
查詢非常容易看懂:?INSERT?關(guān)鍵詞告訴ArangoDB我們想插入一些東西。后面緊跟著的是我們要插入的東西,在這個(gè)案例中是一個(gè)擁有兩個(gè)屬性的文檔。?花括號(hào){ }??表示文件,或者說(shuō)是對(duì)象。我們所說(shuō)的文件是指集合中的記錄。當(dāng)用JSON編碼時(shí),我們叫它對(duì)象。對(duì)象也可以嵌套。下面舉個(gè)例子:
{ "name": { "first": "Katie", "last": "Foster" }}
INTO?必須跟在每一個(gè)?INSERT?操作后面,后面再接上我們儲(chǔ)存文檔的集合的名字。注意集合的名字不必加上引號(hào)。
如果你運(yùn)行上面的查詢語(yǔ)句,會(huì)返回一個(gè)空數(shù)組,因?yàn)槟銢](méi)有用?RETURN?關(guān)鍵詞指定要返回的內(nèi)容。?RETURN?關(guān)鍵詞在修改查詢中是可選項(xiàng),但在數(shù)據(jù)訪問(wèn)查詢中是必選項(xiàng)。就算用上?RESULT,返回值也可能是空數(shù)組,比如制定文檔無(wú)法找到的情況。盡管結(jié)果為空,以上的查詢?nèi)匀粫?huì)創(chuàng)建新用戶文件。你可以在文檔瀏覽器中驗(yàn)證這一點(diǎn)。
這一次我們新建一個(gè)用戶,并且讓新的結(jié)果返回。
INSERT { name: "James Hendrix", age: 69 } INTO usersRETURN NEW
NEW?是一個(gè)虛擬變量,指的是用INSERT語(yǔ)句新建的文檔。查詢結(jié)果如下:
[ { "_key": "10074", "_id": "users/10074", "_rev": "10074", "age": 69, "name": "James Hendrix" }]
現(xiàn)在我們一個(gè)有三個(gè)用戶了。如何用一條語(yǔ)句返回全部數(shù)據(jù)呢?下面的方法不起作用:
RETURN DOCUMENT("users/9883")RETURN DOCUMENT("users/9915")RETURN DOCUMENT("users/10074")
這里僅有一條?RETURN?語(yǔ)句,如果你嘗試執(zhí)行,則會(huì)拋出系統(tǒng)錯(cuò)誤.??DOCUMENT()?函數(shù)提供了一個(gè)補(bǔ)充簽名來(lái)指定多文檔處理,所以我們可以:
RETURN DOCUMENT( ["users/9883", "users/9915", "users/10074"] )
所有3個(gè)文檔的帶有?_ids 的數(shù)組會(huì)被傳遞給函數(shù). 數(shù)組通過(guò)方括號(hào)?[ ]?表示,而其元素使用逗號(hào)進(jìn)行分隔.
但是如果我們添加更多用戶會(huì)怎樣呢? 我們同時(shí)需要修改查詢來(lái)獲取新添加的用戶. 關(guān)于我們的查詢,我們希望表達(dá)的是: “對(duì)于 users 集合中的每一個(gè)用戶, 返回用戶文檔”. 我們可以使用?FOR?循環(huán)格式化該查詢:
FOR user IN users RETURN user
它表達(dá)的是對(duì)?users 中的所有文檔進(jìn)行迭代并使用user?作為變量名, 從而我們可以用來(lái)指代當(dāng)前用戶文檔. 它可以被稱為?doc,?u?或?ahuacatlguacamole, 這取決于你. 然而建議使用一個(gè)簡(jiǎn)短并自描述的名字.
循環(huán)體告訴系統(tǒng)返回變量?user?的值, 這是一個(gè)用戶文檔. 可以像下面這樣返回所有用戶文檔:
[ { "_key": "9915", "_id": "users/9915", "_rev": "9915", "age": 27, "name": "Katie Foster" }, { "_key": "9883", "_id": "users/9883", "_rev": "9883", "age": 32, "name": "John Smith" }, { "_key": "10074", "_id": "users/10074", "_rev": "10074", "age": 69, "name": "James Hendrix" }]
也許你已經(jīng)注意到返回的文檔順序與插入順序并不相同. ArangoDB 并不保證文檔順序,除非你顯式對(duì)其進(jìn)行排序. 我們可以很容易添加了一個(gè)?SORT?操作:
FOR user IN users SORT user._key RETURN user
這依然不會(huì)返回預(yù)期的結(jié)果: James (10074) 會(huì)在 John (9883) 與 Katie (9915) 之前返回. 原因在于?_key?屬性在 ArangoDB 中是一個(gè)字符串,而不是一個(gè)數(shù)字. 字符串的單個(gè)字符會(huì)被進(jìn)行比較.?1?小于?9?,因而結(jié)果是 “正確”的. 如果我們希望使用數(shù)值作為?_key?屬性的值,我們可以將字符串轉(zhuǎn)換為數(shù)字并用其進(jìn)行排序. 然而這樣做有一些影響T. 我們最好排序其他內(nèi)容. 年齡怎么樣?以降序排列嗎?
FOR user IN users SORT user.age DESC RETURN user
用戶的數(shù)據(jù)會(huì)以如下的順序返回:?James (69), John (32), Katie (27)。與用DESC返回降序結(jié)果不同,?ASC返回升序結(jié)果。?ASC是默認(rèn)的選項(xiàng),可以省略。
我們可能需要根據(jù)用戶的年齡返回一個(gè)子集。讓我們返回30歲以上的用戶的數(shù)據(jù):
FOR user IN users FILTER user.age > 30 SORT user.age RETURN user
這么做會(huì)按順序返回John and James。 Katie’s age的屬性不滿足三十歲以上的條件,她只有27歲,因此不再結(jié)果之中。我們可以修改她的年齡,使她重新包含在返回結(jié)果之中,使用如下的查詢語(yǔ)句:
UPDATE "9915" WITH { age: 40 } IN usersRETURN NEW
UPDATE?允許部分編輯已存在的文檔. 另外有?REPLACE, 會(huì)移除所有屬性 (除了?_key?與?_id 保持不變) 并且僅添加部分屬性.?另一方面 UPDATE?替換指定的屬性而保持其他屬性不變.
UPDATE?關(guān)鍵字后跟文檔鍵 (或者帶有?_key 屬性的文檔?/ 對(duì)象) 來(lái)指定要修改的文檔. 要更新的屬性作為對(duì)象使用?WITH關(guān)鍵字寫(xiě)入.?IN?表示在哪個(gè)集合中執(zhí)行該操作, 類似?INTO?(這里兩個(gè)關(guān)鍵字可以互換). 如果我們使用?NEW?偽變量則會(huì)返回應(yīng)用修改的全部文檔:
[ { "_key": "9915", "_id": "users/9915", "_rev": "12864", "age": 40, "name": "Katie Foster" }
相反如果我們使用?REPLACE?, name 屬性會(huì)丟失. 使用?UPDATE, 屬性會(huì)被保留 (如果我們有其他的屬性,也同樣適用該規(guī)則).
讓我們?cè)俅芜\(yùn)行?FILTER?查詢, 但是這一次僅返回用戶名:
FOR user IN users FILTER user.age > 30 SORT user.age RETURN user.name
這會(huì)返回所有3個(gè)用戶的名字:
[ "John Smith", "Katie Foster", "James Hendrix"]
如果僅返回一個(gè)屬性的子集,則將其稱為投影. 另一種投影類型是改變結(jié)果的結(jié)構(gòu):
FOR user IN users RETURN { userName: user.name, age: user.age }
該查詢?yōu)樗械挠脩粑臋n定義了輸出格式. 用戶名作為?userName?返回,而不是 name, 在該示例中 age 與屬性性鍵相同:
[ { "userName": "James Hendrix", "age": 69 }, { "userName": "John Smith", "age": 32 }, { "userName": "Katie Foster", "age": 40 }]
也可以計(jì)算新值:
FOR user IN users RETURN CONCAT(user.name, "'s age is ", user.age)
CONCAT()?是一個(gè)將元素合并為字符串的函數(shù). 在這里我們用其為所有用戶返回一個(gè)描述. 正如你看到的,結(jié)果集合并不總是一個(gè)對(duì)象數(shù)組:
[ "James Hendrix's age is 69", "John Smith's age is 32", "Katie Foster's age is 40"]
現(xiàn)在讓我們來(lái)做一些瘋狂的事情: 對(duì)于用戶集合中的所有文檔,再次對(duì)所有用戶文檔進(jìn)行迭代并返回用戶組合,例如 John 與 Katie. 對(duì)于該問(wèn)題,我們可以在一個(gè)循環(huán)內(nèi)部使用一個(gè)循環(huán)來(lái)獲得叉積 (所有用戶記錄的所有可能組合, 3?3 = 9). 然而我們并不希望得到類似?John + John* 的組合, 所以讓我們使用一個(gè)過(guò)濾器條件來(lái)去除類似的組合:
FOR user1 IN users FOR user2 IN users FILTER user1 != user2 RETURN [user1.name, user2.name]
我們得到6對(duì)組合。類似?James + John?與?John + James?的組合是重復(fù)的,但是已足夠好:
[ [ "James Hendrix", "John Smith" ], [ "James Hendrix", "Katie Foster" ], [ "John Smith", "James Hendrix" ], [ "John Smith", "Katie Foster" ], [ "Katie Foster", "James Hendrix" ], [ "Katie Foster", "John Smith" ]]
我們可以像下面這樣計(jì)算兩個(gè)年齡之和并計(jì)算一些新的內(nèi)容:
FOR user1 IN users FOR user2 IN users FILTER user1 != user2 RETURN { pair: [user1.name, user2.name], sumOfAges: user1.age + user2.age }
我們引入一個(gè)新的屬性?sumOfAges?并將兩個(gè)年齡相加作為其值:
[ { "pair": [ "James Hendrix", "John Smith" ], "sumOfAges": 101 }, { "pair": [ "James Hendrix", "Katie Foster" ], "sumOfAges": 109 }, { "pair": [ "John Smith", "James Hendrix" ], "sumOfAges": 101 }, { "pair": [ "John Smith", "Katie Foster" ], "sumOfAges": 72 }, { "pair": [ "Katie Foster", "James Hendrix" ], "sumOfAges": 109 }, { "pair": [ "Katie Foster", "John Smith" ], "sumOfAges": 72 }]
如果我們希望過(guò)濾新屬性來(lái)僅返回總和小于100的組合,我們應(yīng)該定義一個(gè)變量來(lái)臨時(shí)存儲(chǔ)總和,從而我們可以在?FILTER?語(yǔ)句以及?RETURN?語(yǔ)句中使用:
FOR user1 IN users FOR user2 IN users FILTER user1 != user2 LET sumOfAges = user1.age + user2.age FILTER sumOfAges < 100 RETURN { pair: [user1.name, user2.name], sumOfAges: sumOfAges }
LET?關(guān)鍵字后跟指定的變量名 (sumOfAges), 然后是?=?符號(hào)與值或表達(dá)式來(lái)定義變量的值. 在這里我們重用我們的表達(dá)式來(lái)計(jì)算總和. 然后我們使用另一個(gè)?FILTER?來(lái)略過(guò)不需要的組合并使用我們之前聲明的變量. 我們使用用戶名與所計(jì)算的年齡值的數(shù)組返回一個(gè)投影,為些我們?cè)俅问褂米兞?
[ { "pair": [ "John Smith", "Katie Foster" ], "sumOfAges": 72 }, { "pair": [ "Katie Foster", "John Smith" ], "sumOfAges": 72 }]
小貼士: 當(dāng)定義對(duì)象時(shí), 如果所要求的屬性鍵與屬性值所用的變量相同i, 你可以使用簡(jiǎn)寫(xiě)形式:?{ sumOfAges }?替代?{ sumOfAges: sumOfAges }.
最后,讓我們刪除一個(gè)用戶文檔:
REMOVE "9883" IN users
它會(huì)刪除用戶 John (_key: “9883”). 我們也可以在循環(huán)中移除文檔 (同樣適用于?INSERT,?UPDATE?與?REPLACE):
FOR user IN users FILTER user.age >= 30 REMOVE user IN users
該查詢會(huì)刪除年齡大于等于 30 的所有用戶.
如何繼續(xù)
在AQL?中可探索更多內(nèi)容以及 ArangoDB 提供的更多功能. 繼續(xù)閱讀其他章節(jié)并使用測(cè)試數(shù)據(jù)庫(kù)試驗(yàn)以促進(jìn)你的知識(shí).
如果你希望立即編寫(xiě)更多的 AQL 查詢,請(qǐng)查看:
數(shù)據(jù)查詢: 數(shù)據(jù)訪問(wèn)與修改查詢高級(jí)操作:?FOR,?FILTER?的詳細(xì)描述以及該簡(jiǎn)介中未涉及的更多操作函數(shù): 所提供函數(shù)的參數(shù)ArangoDB程序
ArangoDB包有以下程序:
arangod: ?ArangoDB數(shù)據(jù)庫(kù)守護(hù)進(jìn)程. 此服務(wù)器程序旨在作為守護(hù)程序進(jìn)程運(yùn)行,并通過(guò)TCP / HTTP向各種客戶端連接到服務(wù)器。arangosh: ?ArangoDB shell. 客戶端實(shí)現(xiàn)read-eval-print-Loop(REPL)并提供函數(shù)來(lái)訪問(wèn)和管理ArangoDB服務(wù)器。arangoimp: ArangoDB服務(wù)器的?批量導(dǎo)入器?。它支持JSON和CSV。arangodump:以JSON格式創(chuàng)建ArangoDB數(shù)據(jù)庫(kù)備份?的工具。arangorestore: 將備份數(shù)據(jù)加載回ArangoDB數(shù)據(jù)庫(kù)的工具。arango-dfdb: ArangoDB的數(shù)據(jù)文件調(diào)試器。它主要用于開(kāi)發(fā)ArangoDB。arangobench: A基準(zhǔn)測(cè)試工具。?它可以用于性能和服務(wù)器功能測(cè)試。- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- Commvault持續(xù)業(yè)務(wù)策略:應(yīng)對(duì)現(xiàn)代數(shù)據(jù)保護(hù)挑戰(zhàn)的新范式
- 2025年網(wǎng)絡(luò)安全主要趨勢(shì)
- 2025年值得關(guān)注的數(shù)據(jù)中心可持續(xù)發(fā)展趨勢(shì)
- 量子計(jì)算火熱,投資者又在大舉尋找“量子概念股”
- 從量子威脅到人工智能防御:2025年網(wǎng)絡(luò)安全將如何發(fā)展
- 后人工智能時(shí)代:2025年,在紛擾中重塑數(shù)據(jù)、洞察和行動(dòng)
- 2025年展望:人工智能推動(dòng)IT整合
- 量子計(jì)算:商業(yè)世界的新前沿與設(shè)計(jì)思維的融合
- IDC:三季度全球以太網(wǎng)交換機(jī)收入同比下降7.9%、環(huán)比增長(zhǎng)6.6%
- Fortinet李宏凱:2025年在中國(guó)大陸啟動(dòng)SASE PoP節(jié)點(diǎn)部署 助力企業(yè)出海
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。