# 스키마 형식

## Content

`ISchemaOption`의 `type` 속성은 데이터 원본을 어떻게 구문 분석할지 정의합니다.
이 속성은 `fetch()` 중 `IDataSourceOption`에 제공된 `data` 값이 어떻게 해석될지를 결정합니다.
`type`을 지정하지 않으면 기본값은 `"json"`입니다.

```javascript
const table = dataManager.addTable("products", {
    data: [
        { id: 1, name: "Laptop", price: 1200 }
    ],
    schema: {
        type: "json"
    }
});
```

## 지원되는 형식

다음 값이 지원됩니다.

| 형식 | 설명 |
| ---- | ----------- |
| `"json"` | 데이터를 JSON 배열로 구문 분석합니다(기본값). |
| `"csv"` | 데이터를 CSV 문자열로 구문 분석합니다. |
| `"xml"` | 데이터를 XML 문자열로 구문 분석합니다. |
| `"columnJson"` | 열 기반 JSON 데이터를 구문 분석합니다. |

## JSON(기본값)

`type`이 `"json"`인 경우(또는 지정하지 않은 경우):

* `data`는 객체 배열이어야 합니다.
* `schema.columns`가 정의되지 않은 경우 객체 키를 기반으로 열이 자동 생성됩니다.

예제:

```javascript
const table = dataManager.addTable("employees", {
    data: [
        { id: 1, name: "Alice" },
        { id: 2, name: "Bob" }
    ]
});
```

추가 구성은 필요하지 않습니다.

## CSV

`"csv"`를 사용하는 경우:

* `data`는 CSV 문자열이어야 합니다.
* 문자열은 `fetch()` 중에 구문 분석됩니다.

예제:

```javascript
const table = dataManager.addTable("orders", {
    data: `id,name,amount
1,Alice,100
2,Bob,200`,
    schema: {
        type: "csv"
    }
});
```

`type`을 `"csv"`로 설정하지 않으면 문자열은 CSV로 구문 분석되지 않습니다.

## XML

`"xml"`을 사용하는 경우:

* `data`는 XML 문자열이어야 합니다.
* 구문 분석은 `fetch()` 중에 수행됩니다.
* 대부분의 경우 레코드 컬렉션 위치를 찾기 위해 `dataPath`를 지정해야 합니다.

예제:

```javascript
const table = dataManager.addTable("orders", {
    data: `
<root>
    <row><id>1</id><name>Alice</name></row>
    <row><id>2</id><name>Bob</name></row>
</root>
`,
    schema: {
        type: "xml",
        dataPath: "root.row"
    }
});
```

구문 분석된 XML 데이터에서 레코드 컬렉션을 선택하는 방법에 대한 자세한 내용은 **스키마의 DataPath**를 참고하세요.

## ColumnJson

`"columnJson"`을 사용하는 경우:

* `data`는 속성이 열을 나타내는 객체여야 합니다.
* 각 속성은 값 배열을 포함합니다.
* 행은 인덱스를 기준으로 값을 정렬하여 구성됩니다.

예제:

```javascript
const table = dataManager.addTable("employees", {
    data: {
        id: [1, 2, 3],
        name: ["Alice", "Bob", "Cindy"],
        age: [24, 26, 25]
    },
    schema: {
        type: "columnJson"
    }
});
```

`fetch()` 중 열 기반 구조는 행 기반 레코드로 변환됩니다.

## 스키마 형식을 반드시 지정해야 하는 경우

다음과 같은 경우 `schema.type`을 명시적으로 지정해야 합니다.

* `data` 값이 CSV 문자열인 경우
* `data` 값이 XML 문자열인 경우
* `data` 값이 열 기반 JSON인 경우

표준 JSON 배열의 경우 `"json"` 지정은 선택 사항입니다.

이 속성은 데이터가 구문 분석되는 방식에만 영향을 줍니다.
열 정의, 데이터 동작 및 계층 구조는 `schema` 내에서 별도로 구성됩니다.