# Naming Convention — Folder & File Structure
This document specifies how sitemap URLs map to the file tree under
`skills/mql5/references/book/` and `skills/mql5/references/docs/`.
## Core Rules
1. **One subfolder level**: Under `book/` or `docs/`, at most one level of
subfolder (the "chapter folder") is used. All pages within that chapter are
`.md` files directly inside the chapter folder.
2. **`pics/` exception**: Each chapter folder may contain a `pics/` subfolder
for images extracted from that chapter's pages.
3. **Sequential numbering**: Both chapter folders and files carry numeric
prefixes that reflect their order in the source sitemap.
## Chapter Folders
A "chapter" corresponds to the **first URL path segment** after the sitemap root.
| Source URL pattern | Chapter folder |
|------------------------------|--------------------|
| `/en/book/intro` ... | `00-intro/` |
| `/en/book/basis` ... | `01-basis/` |
| `/en/docs/basis` ... | `00-basis/` |
| `/en/docs/standardlibrary` … | `34-standardlibrary/` |
- **Prefix**: 2-digit zero-padded number (00, 01, 02, …)
- **Suffix**: the URL path segment (e.g. `intro`, `basis`, `standardlibrary`)
- **Order**: by first occurrence in the sitemap
Chapters are numbered **globally** within each sitemap (book and docs are
independent numbering spaces).
## Files Within a Chapter
Each URL that belongs to a chapter becomes one `.md` file inside the chapter
folder. The filename encodes:
```
{4-digit global number}-{derived-name}.md
```
- **4-digit prefix**: sequential number matching the URL's position in the
sitemap (0001, 0002, …). This is **global** across the entire sitemap, not
reset per chapter.
- **Derived name**: the URL path **after** the depth-1 segment, with `/`
replaced by `-`. If the URL **is** the depth-1 segment itself (the chapter
index page), the name is the segment name.
### Derived-name rules
| URL path (after `/en/{book|docs}/`) | Chapter folder | File name |
|-------------------------------------|----------------|---------------------|
| `intro` | `00-intro/` | `0001-intro.md` |
| `intro/edit_compile_run` | `00-intro/` | `0002-edit-compile-run.md` |
| `basis` | `01-basis/` | `0015-basis.md` |
| `basis/syntax` | `01-basis/` | `0016-basis-syntax.md` |
| `basis/types/integer/integertypes` | `01-basis/` | `0019-basis-types-integer-integertypes.md` |
| `standardlibrary/mathematics/...` | `34-standardlibrary/` | `1143-standardlibrary-mathematics-....md` |
### Root-level URLs
The very first URL in each sitemap (e.g. `https://www.mql5.com/en/book` or
`https://www.mql5.com/en/docs`) has no depth-1 segment. It is placed directly
under the references root as:
```
0000-book.md (for book sitemap)
0000-docs.md (for docs sitemap)
```
## Complete Example — Book (first 20)
```
skills/mql5/references/book/
├── 0000-book.md # /en/book
├── 00-intro/
│ ├── 0001-intro.md # /en/book/intro
│ ├── 0002-edit-compile-run.md # /en/book/intro/edit_compile_run
│ ├── 0003-mql-wizard.md # /en/book/intro/mql_wizard
│ ├── ...
│ └── pics/
├── 01-basis/
│ ├── 0015-basis.md # /en/book/basis
│ ├── 0016-basis-identifiers.md # /en/book/basis/identifiers
│ ├── 0017-basis-builtin-types.md # /en/book/basis/builtin_types
│ ├── 0018-basis-builtin-types-integer-numbers.md
│ ├── ...
│ └── pics/
├── 02-oop/
│ ├── ...
│ └── pics/
...
```
## Complete Example — Docs (first 20)
```
skills/mql5/references/docs/
├── 0000-docs.md # /en/docs
├── 00-basis/
│ ├── 0001-basis.md # /en/docs/basis
│ ├── 0002-basis-syntax.md # /en/docs/basis/syntax
│ ├── 0003-basis-syntax-commentaries.md # /en/docs/basis/syntax/commentaries
│ ├── 0004-basis-syntax-identifiers.md
│ ├── 0005-basis-syntax-reserved.md
│ ├── 0006-basis-types.md
│ ├── 0007-basis-types-integer.md
│ ├── 0008-basis-types-integer-integertypes.md
│ ├── ...
│ └── pics/
├── 01-constants/
│ ├── ...
│ └── pics/
...
```
## Image Handling
- Images are saved to `pics/` within the chapter folder where they appear.
- Filenames: `{original-filename}` or `{derived-name}.png` if no useful name.
- The Markdown reference uses a relative path: ``.
- Per extraction spec: the `` alt text is taken from the next sibling
`
` element's innerHTML, not duplicated. ## Name Sanitization When converting URL segments to file/folder names: | Character | Replacement | |-----------|-------------| | `_` | `-` | | `/` | `-` (within filename) | | Uppercase | lowercase | | Non-alphanumeric (except `-`) | removed | Example: `builtin_types` → `builtin-types`, `MQL_Wizard` → `mql-wizard`. ## Validation A post-extraction script should verify: 1. Every sitemap URL has exactly one output file. 2. File numbers are sequential with no gaps. 3. No file exceeds the 4-digit range (max 9999 URLs per sitemap). 4. Chapter folder names match the expected pattern: `{NN}-{segment}`.