사용자:Hsl0/saves 규격: 두 판 사이의 차이

리버티게임, 모두가 만들어가는 자유로운 게임
(새 문서: == 경로 문법 == 경로 문법은 다양한 문서 제목을 효율적으로 지정할 수 있고, 평범한 문서 제목을 입력하는데 방해되지 않도록 정규표현식 문법에서 착안하여 제목에 사용되지 않는 기호들을 활용한 특수한 문법을 사용합니다. === 접두어 === 사용자 문서의 하위 문서를 가리킬 때 사용자 이름을 작성할 필요 없이 '사용자:'로만 시작하면 사용자가 지정한 게임 데이...)
 
 
(같은 사용자의 중간 판 18개는 보이지 않습니다)
1번째 줄: 1번째 줄:
== 예시 ==
* 게임 이름: <code>한게임</code>
* 사용자 이름: <code>너</code>
* 사용자 문서 데이터 경로: <code>사용자:너/Data/</code>
<syntaxhighlight lang="json">
{
    ...
    "saves": {
        "/DB/a": { // 한게임/DB/a
            "model": "wikitext",
            "template": "/템플릿/a", // 한게임/템플릿/a
            "children": {
                "model": "wikitext",
                "template": "/템플릿/a", // 한게임/템플릿/a
                "/[a-zA-Z0-9]{+}": true // 한게임/DB/a/[a-zA-Z0-9]{+}
            }
        },
        "#user": {
            "path": "사용자:", // 사용자:너/Data/한게임
            "model": "json",
            "schema": "/스키마.json" // 한게임/스키마.json
        }
    },
    ...
}
</syntaxhighlight>
== 속성 ==
* <code>path</code>: 약칭이 가리키는 실제 경로 (<code>#</code>로 시작하는 키에서만 사용, '''필수''')
* <code>model</code>: 해당 문서의 콘텐츠 모델 (<code>wikitext</code>, <code>json</code>) ('''필수''')
* <code>children</code>: 해당 경로의 하위 문서의 규칙을 설정할 수 있음. (nesting) <code>/</code>로 시작하는 키를 사용해 하위 문서를 지정할 수 있음. 하위 문서들의 기본 속성을 <code>children</code> 객체에 바로 지정하고, 기본 속성을 그대로 사용하는 하위 경로는 빈 객체나 <code>true</code>를 사용할 수 있음. 문서를 저장하지 않는 경로에는 <code>false</code>를 사용함.
* <code>/''(경로)''</code>: 해당 경로의 속성을 지정 (최상위 <code>saves</code> 객체나 <code>children</code> 객체에서만 사용)
* <code>#''(약칭)''</code>: 약칭의 속성을 지정 (최상위 <code>saves</code> 객체에서만 사용)
=== wikitext 모델 ===
* <code>template</code>: 위키텍스트 기반 DB 문서를 만들 때 기반이 되는 틀. (표시되는 내용이 저장됨. 즉, 위키문법은 nowiki를 시켜야 문서에 저장됨.) (선택, 시스템에 따라 다름)
=== json 모델 ===
* <code>schema</code>: json 기반 DB 문서의 기반이 되는 스키마. 스키마에 맞지 않는 JSON 데이터를 시스템에서 거부할 수 있음 (선택)
== 경로 문법 ==
== 경로 문법 ==
경로 문법은 다양한 문서 제목을 효율적으로 지정할 수 있고, 평범한 문서 제목을 입력하는데 방해되지 않도록 정규표현식 문법에서 착안하여 제목에 사용되지 않는 기호들을 활용한 특수한 문법을 사용합니다.
경로 문법은 다양한 문서 제목을 효율적으로 지정할 수 있고, 평범한 문서 제목을 입력하는데 방해되지 않도록 정규표현식 문법에서 착안하여 제목에 사용되지 않는 기호들을 활용한 특수한 문법을 사용합니다.


=== 접두어 ===
=== 접두어 ===
사용자 문서의 하위 문서를 가리킬 때 사용자 이름을 작성할 필요 없이 '사용자:'로만 시작하면 사용자가 지정한 게임 데이터 저장 경로로 자동 치환됩니다. 다음 예시에서 데이터 저장 경로는 <code>사용자:{{USERNAME}}/Data/</code>이고, 게임 이름은 <code>한게임</code> 입니다.
사용자 문서의 하위 문서를 가리킬 때 사용자 이름을 작성할 필요 없이 <code>사용자:</code>로만 시작하면 사용자가 지정한 게임 데이터 저장 경로로 자동 치환됩니다. 다음 예시에서 데이터 저장 경로는 <code>사용자:{{USERNAME}}/Data/</code>이고, 게임 이름은 <code>한게임</code> 입니다.
 
* <code>사용자:</code> => <code>사용자:{{USERNAME}}/Data/한게임</code>
* <code>사용자:/DB.json</code> => <code>사용자:{{USERNAME}}/Data/한게임/DB.json</code>
* <code>사용자:.json</code> ({{색깔|'''X'''|red}}: 이름이 '.json'인 사용자의 사용자 문서와 혼동이 발생할 수 있고, 최상위 문서가 '한게임.json'이라는 다른 게임과의 충돌을 야기할 수 있기 때문에 게임 이름과 동일한 상위문서와 그 하위문서만 가리킬 수 있습니다.)
* <code>사용자:나</code> ({{색깔|'''X'''|red}}: 제 3자의 사용자 문서는 다루지 않습니다.)
 
게임의 하위 문서는 게임 이름을 작성하는 대신, <code>/</code>로만 시작할 수 있습니다. 다음 예시에서 게임 이름은 <code>한게임</code> 입니다.


* 사용자: => 사용자:{{USERNAME}}/Data/한게임
* <code>/DB</code> => <code>한게임/DB</code>
* 사용자:/DB.json => 사용자:{{USERNAME}}/Data/한게임/DB.json
* 사용자:.json (X: 다른 게임과의 충돌을 야기할 수 있기 때문에 게임 이름과 동일한 상위문서와 그 하위문서만 가리킬 수 있습니다.)


경로가 복잡하다면, #으로 시작하는 별칭을 사용할 수 있습니다.
경로가 복잡하다면, <code>#</code>으로 시작하는 별칭을 사용할 수 있습니다. 이때, 실제 경로는 <code>path</code> 속성에 입럭합니다.


=== 수량자 ===
=== 수량자 ===
다음 기호를 {중괄호} 안에 입력하면 앞에 있는 부분(문자 하나, 그룹, 문자 클래스 등)을 일정 범위로 반복시킵니다.
다음 기호를 {중괄호} 안에 입력하면 앞에 있는 부분(문자 하나, 그룹, 문자 클래스 등)을 일정 범위로 반복시킵니다.
* ?: 0~1
* <code>?</code>: 0~1
* +: 1~
* <code>+</code>: 1~
* *: 0~
* <code>*</code>: 0~


{중괄호} 안에 숫자를 입력해 앞에 있는 부분을 해당 숫자만큼 반복하거나, 두개의 숫자를 입력하고 콤마(,)로 구분하여 반복하는 범위를 지정할 수 있습니다. 시작범위나 끝범위를 생략하여 특정 숫자 이하나 이상으로 반복시킬 수 있습니다.
{중괄호} 안에 숫자를 입력해 앞에 있는 부분을 해당 숫자만큼 반복하거나, 두개의 숫자를 입력하고 콤마(,)로 구분하여 반복하는 범위를 지정할 수 있습니다. 끝범위를 생략하여 특정 숫자 이상으로 반복시킬 수 있습니다.
* {''n''}: ''n''
* <code>{''n''}</code>: ''n''
* {''n'',''m''}: ''n''~''m''
* <code>{''n'',''m''}</code>: ''n''~''m''
* {''n'',}: ''n''~
* <code>{''n'',}</code>: ''n''~
* {,''m''}: ~''m''


=== 정규표현식 조각 ===
=== 정규표현식 조각 ===
{중괄호} 안에 정규식에서 그룹을 묶는 (괄호)나 여러 문자 중 하나를 선택하는 [대괄호]같이 괄호로 묶인 정규식 문법이나 역슬래시로 시작하는 \w 등의 문자 클래스, 임의의 문자를 의미하는 .과 이러한 문법 뒤의 수량자 기호만으로 이루어진 정규표현식을 그대로 넣을 수 있습니다.
{중괄호} 안에 정규식에서 그룹을 묶는 (괄호)나 여러 문자 중 하나를 선택하는 [대괄호]같이 괄호로 묶인 정규식 문법이나 역슬래시로 시작하는 <code>\w</code> 등의 문자 클래스, 임의의 문자를 의미하는 <code>.</code>과 이러한 문법 뒤의 수량자 기호만으로 이루어진 정규표현식을 그대로 넣을 수 있습니다.


다음은 예시입니다.
다음은 예시입니다.
* {(그룹)+}
* <code>{(그룹)+}</code>
* {\w}
* <code>{\w}</code>
* {[0-9]?}
* <code>{[0-9]?}</code>


여러 문자를 선택하는 [대괄호] 문법은 {중괄호} 없이 바로 사용할 수 있습니다. 다만, 수량자와 함께 사용하려면 [대괄호] 문법과 수량자 문법을 모두 {중괄호}로 묶거나, [대괄호] 문법 뒤에 수량자 문법만을 {중괄호}로 묶어야 합니다. [대괄호] 문법은 역슬래시로 시작하는 문자열 클래스도 포함시킬 수 있으므로 {중괄호}의 대안이 될 수 있습니다.
여러 문자를 선택하는 [대괄호] 문법은 {중괄호} 없이 바로 사용할 수 있습니다. 다만, 수량자와 함께 사용하려면 [대괄호] 문법과 수량자 문법을 모두 {중괄호}로 묶거나, [대괄호] 문법 뒤에 수량자 문법만을 {중괄호}로 묶어야 합니다. [대괄호] 문법은 역슬래시로 시작하는 문자열 클래스도 포함시킬 수 있으므로 {중괄호}의 대안이 될 수 있습니다.


* [a-z]{+}
* <code>[a-z]{+}</code>
* [\d]{1,3}
* <code>[\d]{1,3}</code>


=== 정규표현식 ===
=== 정규표현식 ===
대괄호 안에 슬래시(/) 기호를 넣고 그 사이에 더 복잡한 정규표현식을 그대로 넣을 수 있습니다. 슬래시 뒤에는 정규표현식의 작동방식을 수정하는 플래그를 지정할 수 있습니다.
대괄호 안에 슬래시(/) 기호를 넣고 그 사이에 더 복잡한 정규표현식을 그대로 넣을 수 있습니다. 슬래시 뒤에는 정규표현식의 작동방식을 수정하는 플래그를 지정할 수 있습니다.


* {/(정규식{1,}|[a-z\d]+)?/i}
* <code>{/(정규식{1,}|[a-z\d]+)?/i}</code>


=== 변수 및 상수 ===
=== 변수 및 상수 ===
미리 지정된 상수를 대괄호를 통해 포함시킬 수 있습니다. 단, 다른 문법과 충돌되지 않도록 상수는 문자로 시작해야 하고, 슬래시(/), 역슬래시(\), 괄호, 수량자 기호를 포함시킬 수 없습니다. 다음은 상수 목록입니다.
미리 지정된 상수를 대괄호를 통해 포함시킬 수 있습니다. 단, 다른 문법과 충돌되지 않도록 상수는 문자로 시작해야 하고, 슬래시(/), 역슬래시(\), 괄호, 수량자 기호를 포함시킬 수 없습니다. 다음은 상수 목록입니다.


* {USERNAME} 사용자 이름
* <code>{USERNAME}</code>: 사용자 이름 => <code>{{USERNAME}}</code>

2024년 7월 10일 (수) 16:31 기준 최신판

예시[편집 | 원본 편집]

  • 게임 이름: 한게임
  • 사용자 이름:
  • 사용자 문서 데이터 경로: 사용자:너/Data/
{
    ...
    "saves": {
        "/DB/a": { // 한게임/DB/a
            "model": "wikitext",
            "template": "/템플릿/a", // 한게임/템플릿/a
            "children": {
                "model": "wikitext",
                "template": "/템플릿/a", // 한게임/템플릿/a
                "/[a-zA-Z0-9]{+}": true // 한게임/DB/a/[a-zA-Z0-9]{+}
            }
        },
        "#user": {
            "path": "사용자:", // 사용자:너/Data/한게임
            "model": "json",
            "schema": "/스키마.json" // 한게임/스키마.json
        }
    },
    ...
}

속성[편집 | 원본 편집]

  • path: 약칭이 가리키는 실제 경로 (#로 시작하는 키에서만 사용, 필수)
  • model: 해당 문서의 콘텐츠 모델 (wikitext, json) (필수)
  • children: 해당 경로의 하위 문서의 규칙을 설정할 수 있음. (nesting) /로 시작하는 키를 사용해 하위 문서를 지정할 수 있음. 하위 문서들의 기본 속성을 children 객체에 바로 지정하고, 기본 속성을 그대로 사용하는 하위 경로는 빈 객체나 true를 사용할 수 있음. 문서를 저장하지 않는 경로에는 false를 사용함.
  • /(경로): 해당 경로의 속성을 지정 (최상위 saves 객체나 children 객체에서만 사용)
  • #(약칭): 약칭의 속성을 지정 (최상위 saves 객체에서만 사용)

wikitext 모델[편집 | 원본 편집]

  • template: 위키텍스트 기반 DB 문서를 만들 때 기반이 되는 틀. (표시되는 내용이 저장됨. 즉, 위키문법은 nowiki를 시켜야 문서에 저장됨.) (선택, 시스템에 따라 다름)

json 모델[편집 | 원본 편집]

  • schema: json 기반 DB 문서의 기반이 되는 스키마. 스키마에 맞지 않는 JSON 데이터를 시스템에서 거부할 수 있음 (선택)

경로 문법[편집 | 원본 편집]

경로 문법은 다양한 문서 제목을 효율적으로 지정할 수 있고, 평범한 문서 제목을 입력하는데 방해되지 않도록 정규표현식 문법에서 착안하여 제목에 사용되지 않는 기호들을 활용한 특수한 문법을 사용합니다.

접두어[편집 | 원본 편집]

사용자 문서의 하위 문서를 가리킬 때 사용자 이름을 작성할 필요 없이 사용자:로만 시작하면 사용자가 지정한 게임 데이터 저장 경로로 자동 치환됩니다. 다음 예시에서 데이터 저장 경로는 사용자:너/Data/이고, 게임 이름은 한게임 입니다.

  • 사용자: => 사용자:너/Data/한게임
  • 사용자:/DB.json => 사용자:너/Data/한게임/DB.json
  • 사용자:.json (X: 이름이 '.json'인 사용자의 사용자 문서와 혼동이 발생할 수 있고, 최상위 문서가 '한게임.json'이라는 다른 게임과의 충돌을 야기할 수 있기 때문에 게임 이름과 동일한 상위문서와 그 하위문서만 가리킬 수 있습니다.)
  • 사용자:나 (X: 제 3자의 사용자 문서는 다루지 않습니다.)

게임의 하위 문서는 게임 이름을 작성하는 대신, /로만 시작할 수 있습니다. 다음 예시에서 게임 이름은 한게임 입니다.

  • /DB => 한게임/DB

경로가 복잡하다면, #으로 시작하는 별칭을 사용할 수 있습니다. 이때, 실제 경로는 path 속성에 입럭합니다.

수량자[편집 | 원본 편집]

다음 기호를 {중괄호} 안에 입력하면 앞에 있는 부분(문자 하나, 그룹, 문자 클래스 등)을 일정 범위로 반복시킵니다.

  • ?: 0~1
  • +: 1~
  • *: 0~

{중괄호} 안에 숫자를 입력해 앞에 있는 부분을 해당 숫자만큼 반복하거나, 두개의 숫자를 입력하고 콤마(,)로 구분하여 반복하는 범위를 지정할 수 있습니다. 끝범위를 생략하여 특정 숫자 이상으로 반복시킬 수 있습니다.

  • {n}: n
  • {n,m}: n~m
  • {n,}: n~

정규표현식 조각[편집 | 원본 편집]

{중괄호} 안에 정규식에서 그룹을 묶는 (괄호)나 여러 문자 중 하나를 선택하는 [대괄호]같이 괄호로 묶인 정규식 문법이나 역슬래시로 시작하는 \w 등의 문자 클래스, 임의의 문자를 의미하는 .과 이러한 문법 뒤의 수량자 기호만으로 이루어진 정규표현식을 그대로 넣을 수 있습니다.

다음은 예시입니다.

  • {(그룹)+}
  • {\w}
  • {[0-9]?}

여러 문자를 선택하는 [대괄호] 문법은 {중괄호} 없이 바로 사용할 수 있습니다. 다만, 수량자와 함께 사용하려면 [대괄호] 문법과 수량자 문법을 모두 {중괄호}로 묶거나, [대괄호] 문법 뒤에 수량자 문법만을 {중괄호}로 묶어야 합니다. [대괄호] 문법은 역슬래시로 시작하는 문자열 클래스도 포함시킬 수 있으므로 {중괄호}의 대안이 될 수 있습니다.

  • [a-z]{+}
  • [\d]{1,3}

정규표현식[편집 | 원본 편집]

대괄호 안에 슬래시(/) 기호를 넣고 그 사이에 더 복잡한 정규표현식을 그대로 넣을 수 있습니다. 슬래시 뒤에는 정규표현식의 작동방식을 수정하는 플래그를 지정할 수 있습니다.

  • {/(정규식{1,}|[a-z\d]+)?/i}

변수 및 상수[편집 | 원본 편집]

미리 지정된 상수를 대괄호를 통해 포함시킬 수 있습니다. 단, 다른 문법과 충돌되지 않도록 상수는 문자로 시작해야 하고, 슬래시(/), 역슬래시(\), 괄호, 수량자 기호를 포함시킬 수 없습니다. 다음은 상수 목록입니다.

  • {USERNAME}: 사용자 이름 =>