# Connector 数据接入

一个数据视图（DataSet.DataView）实例在接入数据时就会用到 Connector，其语法如下：

```javascript
dv.source(data, {
  type: `${connectorName}`,
  ...otherOptions,
});
```

举个例子：

```javascript
const testCSV = `Expt,Run,Speed
 1,1,850
 1,2,740
 1,3,900
 1,4,1070`;

const dv = new DataSet.DataView().source(testCSV, {
  type: 'csv',
});

console.log(dv.rows);
/*
 * dv.rows:
 * [
 *   {Expt: " 1", Run: "1", Speed: "850"}
 *   {Expt: " 1", Run: "2", Speed: "740"}
 *   {Expt: " 1", Run: "3", Speed: "900"}
 *   {Expt: " 1", Run: "4", Speed: "1070"}
 * ]
 */
```

上述代码中，数据视图实例 `dv` 使用 `csv` 类型的 Connector 载入了一段 CSV 文本。

目前 DataSet 支持以下几种常用的 Connector：

## 默认

直接调用 `dv.source(data)`，不通过配置项指定使用的 Connector 时，则有以下两种默认的情形：

第一种，data 传入的是具体数组数据，那么

```javascript
dv.rows = deepClone(data);
```

第二种，data 传入的是另一个 DataView 的实例或者实例的名称，那么

```javascript
dv.rows = deepClone(ds.getView(otherDv).rows);
```

## dsv

具体用法见示例：

```javascript
dv.source(dsvStr, {
  type: 'dsv', // 指定使用dsv connector
  delimiter: '|', // 指定分隔符
});
```

## csv

具体用法见示例：

```javascript
dv.source(csvStr, {
  type: 'csv', // 指定使用dsv connector
  delimiter: ',', // 指定分隔符
});
```

## tsv

具体用法见示例：

```javascript
dv.source(tsvStr, {
  type: 'tsv', // 指定使用tsv connector
});
```

## GeoJSON

具体用法见示例：

```javascript
dv.source(geojsonData, {
  type: 'GeoJSON', // 别名 geo / geojson
});
```

> dv.dataType 会被更改为 'geo'，从而 dv 可以执行一些 Geo 相关的实例方法。

## TopoJSON

具体用法见示例：

```javascript
dv.source(topojsonData, {
  type: 'TopoJSON', // 别名 topojson
  object: 'xxx', // TopoJSON 相当于多个 GeoJSON 合并起来做了压缩，其中每一个 object 都相当于一份 GeoJSON 数据，指定 object 就是从中提取一份 Geo 数据
});
```

> dv.dataType 会被更改为 'geo'，从而 dv 可以执行一些 Geo 相关的实例方法。

## hierarchy

具体用法见示例：

```javascript
dv.source(tree, {
  type: 'hierarchy', // 别名 tree
  children: (d) => d.children, // 可选，函数，返回子树
});
```

> dv.dataType 会被变更为 'hierarchy' ，从而 dv 可以执行一些树形结构相关的实例方法和 Transform。

> dv.root 为根节点

## graph

具体用法见示例：

```javascript
dv.source(graph, {
  type: 'graph',
  nodes: (d) => d.nodes, // 节点集对应字段
  edges: (d) => d.edges, // 边集对应字段
});
```

> dv.dataType 会被变更为 'graph'，从而 dv 可以执行图相关的实例方法和 Transform。
