import{_ as o,r as i,o as s,c as a,a as c,d as e,e as t,b as r}from"./app-5cdcb249.js";const l={},d=e("h1",{id:"iotdb-用户手册-toc",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#iotdb-用户手册-toc","aria-hidden":"true"},"#"),t(" IoTDB 用户手册 Toc")],-1),h=e("p",null,"我们一直都在致力于不断向 IOTDB 中引入更多功能，因此不同的发行版本的用户手册文档也不尽相同。",-1),u=e("p",null,[t('"In Progress Version" 用于匹配 IOTDB 源代码存储库的 master 分支。'),e("br"),t(" 其他文档用于匹配 IoTDB 发布的版本。")],-1),p={href:"https://iotdb.apache.org/UserGuide/Master/QuickStart/QuickStart.html",target:"_blank",rel:"noopener noreferrer"},_={href:"https://iotdb.apache.org/UserGuide/V1.0.x/QuickStart/QuickStart.html",target:"_blank",rel:"noopener noreferrer"},m={href:"https://iotdb.apache.org/UserGuide/V0.13.x/QuickStart/QuickStart.html",target:"_blank",rel:"noopener noreferrer"};function f(g,b){const n=i("ExternalLinkIcon");return s(),a("div",null,[c(`

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

`),d,h,u,e("ul",null,[e("li",null,[e("a",p,[t("In progress version"),r(n)])]),e("li",null,[e("a",_,[t("Version 1.0.x"),r(n)])]),e("li",null,[e("a",m,[t("Version 0.13.x"),r(n)])])])])}const I=o(l,[["render",f],["__file","UserGuideReadme.html.vue"]]);export{I as default};
