# 스키마의 DataPath

## Content

`dataPath` 속성은 구문 분석된 데이터 내에서 레코드 컬렉션이 위치한 경로를 지정합니다.
일반적으로 다음과 함께 사용됩니다.

* `schema.type = "xml"`
* 중첩 JSON 구조

`fetch()` 중 데이터 원본은 먼저 `schema.type`에 따라 구문 분석됩니다.
그 다음 `dataPath`를 사용하여 테이블을 채울 레코드 배열의 위치를 찾습니다.

## DataPath가 필요한 경우

구문 분석된 루트 값이 **배열이 아닌 경우** `dataPath`를 정의해야 합니다.
`fetch()` 중 데이터 매니저는 최종적으로 해석된 레코드 컬렉션이 배열이기를 기대합니다. 루트 구문 분석 결과가 객체인 경우 레코드 배열을 포함하는 속성을 선택하기 위해 `dataPath`를 사용해야 합니다.
`dataPath`를 지정하지 않으면:

* 루트 구문 분석 결과가 레코드 컬렉션으로 처리됩니다.
* 루트 값이 배열이 아닌 경우 `fetch()` 중 오류가 발생합니다.

## XML 예제

다음 XML 데이터를 가정해 보겠습니다.

```xml
<root>
    <data>
        <items>
            <row>
                <id>1</id>
                <name>Alice</name>
            </row>
            <row>
                <id>2</id>
                <name>Bob</name>
            </row>
        </items>
    </data>
</root>
```

실제 레코드는 다음 위치에 있습니다.

```auto
root.data.items.row
```

구성:

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

`fetch()` 후 테이블에는 두 개의 레코드가 포함됩니다.

## 중첩 JSON 예제

`dataPath`는 중첩 JSON 데이터에도 사용할 수 있습니다.
예제:

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

테이블 레코드는 `payload.items`에서 추출됩니다.

## 경로 형식

* `dataPath`는 점 표기법(dot notation)을 사용합니다.
* 각 세그먼트는 중첩 속성을 나타냅니다.
* 최종 해석 결과는 반드시 레코드 배열이어야 합니다.

해석된 경로가 존재하지 않거나 유효한 컬렉션을 참조하지 않는 경우 `fetch()` 중 오류가 발생합니다.

## 요약

`dataPath`는:

* 구문 분석된 데이터에서 레코드 컬렉션을 선택합니다.
* XML에서 일반적으로 필요합니다.
* 중첩 JSON에 사용할 수 있습니다.
* 반드시 배열로 해석되어야 합니다.

`dataPath`는 열이나 데이터 동작을 정의하지 않습니다.
열 구조는 `schema.columns`를 사용하여 별도로 구성합니다.