XML 구문에 대한 어떤 유용한 대안을 알고 있습니까?[닫은]

StackOverflow https://stackoverflow.com/questions/51492

  •  09-06-2019
  •  | 
  •  

문제

나를 위한 쓸 수 있는 다음을 의미합니다:

  • 실제 현장에서 사용되고 있어요
  • 도구 지원이 있습니다.(적어도 간단한 편집기)
  • 사람이 읽을 수 있는 구문이 있습니다(꺾쇠 괄호는 사용하지 마세요).

또한 가능한 한 XML에 가깝기를 원합니다.속성뿐만 아니라 속성도 지원되어야 합니다.그래서 아니야 YAML 제발.현재 내 마음속에는 일치하는 언어가 하나만 떠오릅니다. JSON.다른 대안을 알고 있나요?

도움이 되었습니까?

해결책

YAML은 JSON의 100% 상위 집합이므로 YAML을 거부하고 대신 JSON을 고려하는 것은 의미가 없습니다.YAML은 JSON이 수행하는 모든 작업을 수행하지만 YAML은 훨씬 더 많은 기능(참조 등)을 제공합니다.

DTD를 사용하여 문서의 유효성을 검사하는 것 외에는 YAML이 할 수 없는 XML이 할 수 있는 일은 아무것도 생각할 수 없습니다. 내 경험상 오버헤드를 감당할 가치가 전혀 없었습니다.그러나 YAML은 XML보다 훨씬 빠르고 쉽게 입력하고 읽을 수 있습니다.

속성이나 속성에 대해 생각해 보면 실제로는 아무것도 "추가"하지 않습니다.이는 무언가를 자체 하위 노드에 배치하는 대신 노드의 속성으로 작성하는 표기법상의 지름길일 뿐입니다.그러나 이러한 편리함이 마음에 든다면 YAML의 인라인 목록/해시를 사용하여 에뮬레이션할 수 있는 경우가 많습니다.예:

<!-- XML -->
<Director name="Spielberg">
    <Movies>
        <Movie title="Jaws" year="1975"/>
        <Movie title="E.T." year="1982"/>
    </Movies>
</Director>


# YAML
Director: 
    name: Spielberg
    Movies:
      - Movie: {title: E.T., year: 1975}
      - Movie: {title: Jaws, year: 1982}

나에게는 각 노드 태그를 두 번 작성할 필요가 없다는 장점과 모든 꺾쇠 괄호에서 벗어나는 자유로움이 결합되어 YAML을 선호하는 선택으로 만듭니다.나는 또한 공식적인 태그 속성이 없다는 점을 좋아합니다. 본질적으로 동일한 개념에 대해 두 세트의 구문(작성 및 탐색 시 모두)을 불필요하게 도입하는 XML의 회색 영역처럼 항상 보였기 때문입니다.YAML은 이러한 혼란을 완전히 없애줍니다.

다른 팁

JSON 매우 좋은 대안이며 이를 위한 도구가 여러 언어로 제공됩니다.그리고 네이티브 자바스크립트이므로 웹 클라이언트에서 사용하기가 정말 쉽습니다.

나는 발견했다 S-표현 구조화된 데이터를 표현하는 좋은 방법이 될 것입니다.생성하고 구문 분석하기 쉬운 매우 간단한 형식입니다.속성을 지원하지 않지만 YAML 및 JSON처럼 그럴 필요는 없습니다.속성은 XML이 자세한 내용을 제한하는 방법일 뿐입니다.더 간단하고 깔끔한 형식에는 필요하지 않습니다.

TL;DR

프롤로그는 여기서 언급되지 않았지만 제가 아는 데이터를 표현하는 데 가장 적합한 형식입니다.프롤로그 프로그램은 기본적으로 엔터티 간의 복잡한 관계로 데이터베이스를 설명합니다.프롤로그는 구문 분석하기 매우 간단하며 아마도 유일한 경쟁자는 이 도메인의 S-표현식일 것입니다.

풀 버전

프로그래머는 XML이 실제로 무엇으로 구성되어 있는지를 종종 "잊습니다".일반적으로 그것이 무엇인지의 매우 작은 하위 집합을 나타냅니다.XML은 최소한 다음과 같은 부분으로 구성된 매우 복잡한 형식입니다. DTD 스키마 언어, XSD 스키마 언어, XSLT 변환 언어, RNG 스키마 언어 그리고 XPath (XQuery 포함) 언어 - 모두 XML 표준의 일부입니다.게다가 다음과 같은 외경도 있습니다. E4X.그들 각각은 자신만의 버전을 갖고 있으며, 상당한 중복, 비호환성 등이 있습니다.실제로 이 모든 것을 구현하는 XML 파서는 거의 없습니다.널리 사용되는 구문 분석의 여러 가지 단점과 버그는 말할 것도 없고, 일부는 다음과 같은 주목할만한 보안 문제로 이어집니다. https://en.wikipedia.org/wiki/XML_external_entity_attack .

따라서 XML을 찾고 대안 별로 좋은 생각이 아닙니다.아마도 XML과 같은 것을 전혀 다루고 싶지 않을 것입니다.

YAML은 아마도 두 번째로 최악의 옵션일 것입니다.XML만큼 크지는 않지만 모든 기반을 포괄하려는 시도로 설계되었습니다.각각 10번 이상...누구도 상상할 수 없는 다양하고 독특한 방식으로 말이죠.아직 제대로 작동하는 YAML 파서에 대해 들어본 적이 없습니다.YAML을 많이 사용하는 언어인 Ruby는 망했다 때문에.내가 지금까지 본 모든 YAML 파서는 libyaml, 이는 그 자체로 손으로 작성한(공식 설명에서 생성된 것이 아닌) 종류의 파서이며 정확성을 확인하기가 매우 어려운 코드(복잡한 제어 흐름으로 수백 줄에 걸쳐 있는 함수)입니다.이미 언급했듯이 JSON이 완전히 포함되어 있습니다.소수의 유니코드 코딩 기술 외에도...같은 문서 안에는 아마도 듣고 싶지 않은 다른 것들이 많이 있을 것입니다.

반면에 JSON은 다른 두 가지와 완전히 다릅니다.Maven Nexus에서 JSON 파서 아티팩트를 다운로드하는 동안 JSON 파서를 작성할 수 있습니다.그것은 거의 할 수 없지만 적어도 당신은 그것이 무엇을 할 수 있는지 알고 있습니다.놀라운 일이 아닙니다.(문자열의 문자 이스케이프 및 이중 인코딩과 관련된 일부 불일치를 제외하고)은밀한 공격은 없습니다.그 안에는 댓글을 쓸 수 없습니다.여러 줄 문자열이 나빠 보입니다.속성과 특성을 구별한다는 것이 무엇을 의미하든 더 많은 중첩 사전으로 구현할 수 있습니다.

XML이 잘못한 부분을 바로잡고 싶었지만...그렇다면 YAML이나 JSON과 같은 인기 있는 기능은 작동하지 않습니다.어쨌든 패션과 합리적 사고는 70년대 중반 프로그래밍에서 갈라졌습니다.따라서 McCarthy, Hoare, Codd 및 Kowalski와 함께 모든 것이 시작된 곳으로 돌아가서 표현하려는 것이 무엇인지 파악한 다음 자신이 무엇이든 가장 좋은 표현 기술이 무엇인지 확인해야 합니다. 표현하려고 노력 중 :)

Jeff는 이에 대해 썼습니다. 여기 그리고 여기.시작하는 데 도움이 될 것입니다.

JSON을 추천합니다 ...하지만 이미 언급하셨으니 한 번 살펴보세요. Google 프로토콜 버퍼.

편집하다:프로토콜 버퍼는 프로그래밍 방식으로 사용되도록 만들어졌으므로(C++, Java, Python...에 대한 바인딩이 있음) 사용자의 목적에 적합하지 않을 수 있습니다.

당신의 요구는 좀 불가능해요..XML에 가까운 것을 원하지만 꺾쇠 괄호(YAML)가 없는 가장 유사한 것을 거부할 수 있습니다.

내가 싫어하는 만큼 XML을 사용하는 것은 어떨까요?실제로 XML을 읽을 필요는 없습니다(제 생각에는 디버깅은 제외하고). 이를 위한 터무니없는 양의 도구가 있습니다.

XML이 아닌 대부분의 항목은 널리 사용되지 않으므로 도구 지원이 줄어듭니다.

JSON은 아마도 거의 동일하지만 거의 똑같이 읽을 수 없습니다.하지만 다시 말하지만, 실제로 읽을 필요는 없습니다(사용 중인 언어에 상관없이 로드하고 기본 배열/딕셔너리/변수/무엇이든 변환해야 함).

아, JSON을 찾았네요 멀리 XML보다 구문 분석하기가 더 좋습니다.나는 그것을 Javascript와 simplejson Python 모듈에서 사용했습니다. 명령 하나 정도가 네이티브 Python dict 또는 Javascript 객체(따라서 이름입니다!)로 멋지게 변환되었습니다.

있다 축삭 XML과 JSON의 장점을 다룹니다.여러 가지 예를 들어 설명해 보겠습니다.

AXON은 XML 데이터의 짧은 형식으로 간주될 수 있습니다.

XML

<person>
   <name>Frank Martin</name>
   <age>32</age>
 </person>

축삭

person{
  name{"Frank Martin"}
  age{32}}

또는

person
  name:
    "Frank Martin"
  age:
    32

XML

<person name="Frank Martin" age="32" />

축삭

person{name:"Frank Martin" age:32}

또는

person
  name: "Frank Martin"
  age: 32

AXON에는 JSON 형식이 포함되어 있습니다.

JSON

{"name":"Frank Martin" "age":32 "birth":"1965-12-24"}

축삭

{name:"Frank Martin" age:32 birth:1965-12-24}

AXON은 XML과 유사한 데이터와 JSON과 유사한 데이터의 조합을 나타낼 수 있습니다.

축삭

table {
  fields {
    ("id" "int") ("val1" "double") ("val2" "int") ("val3" "double")
  }
  rows {
    (1 3.2 123 -3.4)
    (2 3.5 303 2.4)
    (3 2.3 235 -1.2)
  }
}

또는

table
  fields
    ("id" "int")
    ("val1" "double")
    ("val2" "int") 
    ("val3" "double")
  rows
    (1 3.2 123 -3.4)
    (2 3.5 303 2.4)
    (3 2.3 235 -1.2)

Python 라이브러리를 사용할 수 있습니다. 피액슨 지금.

제 생각에는 클리어실버 아주 좋은 대안입니다.비교페이지도 있어요 여기 그리고 목록 프로젝트 그걸 사용하는 거야

코드와 유사한 데이터를 저장하기 위해, (Loyc Expression Syntax)는 새로운 대안입니다.많은 사람들이 조건부, 명령 호출, 때로는 루프를 지원하는 빌드 시스템과 같은 코드와 유사한 구조에 XML을 사용하는 것을 보았습니다.LES에서는 다음과 같은 것들이 자연스러워 보입니다.

// LES code has no built-in meaning. This just shows what it looks like.
[DelayedWrite]
Output(
    if version > 4.0 {
        $ProjectDir/Src/Foo;
    } else {
        $ProjectDir/Foo;
    }
);

하지만 아직 훌륭한 도구 지원은 없습니다.현재 유일한 LES 라이브러리는 C#용입니다.현재 단 하나의 앱만이 LES를 사용하는 것으로 알려져 있습니다. LLLPG."속성"을 지원하지만 XML 속성이 아닌 C# 속성 또는 Java 주석과 같습니다.

이론적으로는 데이터나 마크업에 LES를 사용할 수 있지만 이를 수행하는 방법에 대한 표준은 없습니다.

body {
    '''Click here to use the World's '''
    a href="http://google.com" {
        strong "most popular"; " search engine!"
    };
};

point = (2, -3);
tasteMap = { "lemon" -> sour; "sugar" -> sweet; "grape" -> yummy };

꺾쇠 괄호에 알레르기가 있는 경우 JSON을 사용하세요. HDF (클리어실버) 및 OGDL 내가 직접 아는 사람은 그들뿐이다.

약간의 인터넷 검색 끝에 여기에서 대안 목록도 찾았습니다.
http://web.archive.org/web/20060325012720/www.pault.com/xmlalternatives.html

YAML은 모든 기능을 갖추고 일반적으로 사람이 읽을 수 있는 형식이지만 이번 겨울에 우리가 목격한 Rails 취약점에서 알 수 있듯이 아킬레스건의 치유는 복잡성입니다.구성 언어로서 Ruby의 편재성으로 인해 Github로 유명한 Tom Preston-Werner는 TOML이라는 건전한 대안을 만들기 위해 나섰습니다.즉시 큰 관심을 얻었으며 뛰어난 도구 지원을 제공합니다.YAML을 보는 사람이라면 누구나 확인해 보시기 바랍니다.

https://github.com/mojombo/toml

AFAIK, JSON 및 YAML은 데이터 구조 측면에서 정확히 동일합니다.YAML에는 대괄호와 따옴표 등이 적습니다.그래서 나는 당신이 어떻게 하나를 거부하고 다른 하나를 유지하는지 알 수 없습니다.

또한 XML의 꺾쇠 괄호가 JSON의 대괄호, 중괄호 및 따옴표보다 "사람이 읽을 수 있는" 능력이 떨어지는지 알 수 없습니다.

XML에 대한 대안은 정말 많이 있지만 그 중 많은 경우의 주요 문제점은 선택한 모든 언어에 대해 라이브러리를 사용할 수 없으며 라이브러리를 구현하는 데 상대적으로 시간이 많이 걸린다는 것입니다.

키-값 쌍과 비교하면 트리 구조 자체를 구문 분석하는 것이 그다지 즐겁지 않을 수 있습니다.해시 테이블.해시 테이블 인스턴스가 모든 키가 문자열이고 모든 값이 문자열이라는 요구 사항을 충족하는 경우 hashtable2string() 및 string2hashtable()을 구현하는 것이 상대적으로 힘들지 않습니다.

저는 PHP와 JavaScript 사이에서 AJAX의 해시 테이블 직렬화를 사용해 왔으며 제가 개발한 형식은 ProgFTE(Programmer Friendly text Exchange)라고 하며 다음 위치에 설명되어 있습니다.

http://martin.softf1.com/g/n//a2/doc/progfte/index.html

Kibuvits Ruby 라이브러리의 일부로 ProgFTE 구현의 Ruby 버전을 찾을 수 있습니다.http://rubyforge.org/projects/kibuvits/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top