XML 스키마 (XSD)에서 Json 스키마 생성 [닫힘]


79

누구든지 기존 XML 스키마 (XSD 파일)에서 JSON 스키마 를 생성하는 방법을 알고 있습니까? 이를 위해 사용할 수있는 도구가 있습니까?


4
진짜 질문은 "JSON Schema와 XML Schema 사이에 매핑이 가능합니까?"라고 생각합니다. 주제에서 벗어난 것이 아닙니다. 아마도 질문이 다시 표현 될 수있을 것입니다.
Eric Hartford

1
Falco Nogatz는 2013 년 BSc 논문을 작성하여 xsd2json을 얻었습니다 .
supervacuo 2014

한 가지 방법은 XSD에서 Java 클래스로, Java 클래스에서 JSON 스키마로 이동하는 것입니다. dzone.com/articles/generating-json-schema-xsd 에서 자세한 내용을 확인하십시오 .
koppor

답변:


41

면책 조항 : 저는 강력한 오픈 소스 XML <-> JSON JavaScript 매핑 라이브러리 인 Jsonix 의 저자입니다 .

오늘 저는 새로운 JSON 스키마 생성 기능 이 포함 된 Jsonix Schema Compiler 의 새 버전을 출시했습니다 .

예를 들어 구매 주문 스키마를 살펴 보겠습니다 . 다음은 조각입니다.

  <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

  <xsd:complexType name="PurchaseOrderType">
    <xsd:sequence>
      <xsd:element name="shipTo" type="USAddress"/>
      <xsd:element name="billTo" type="USAddress"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element name="items"  type="Items"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date"/>
  </xsd:complexType>

제공된 명령 줄 도구를 사용하여이 스키마를 컴파일 할 수 있습니다.

java -jar jsonix-schema-compiler-full.jar
    -generateJsonSchema
    -p PO
    schemas/purchaseorder.xsd

컴파일러는 Jsonix 매핑일치하는 JSON 스키마를 생성 합니다.

결과는 다음과 같습니다 (간결성을 위해 편집 됨).

{
    "id":"PurchaseOrder.jsonschema#",
    "definitions":{
        "PurchaseOrderType":{
            "type":"object",
            "title":"PurchaseOrderType",
            "properties":{
                "shipTo":{
                    "title":"shipTo",
                    "allOf":[
                        {
                            "$ref":"#/definitions/USAddress"
                        }
                    ]
                },
                "billTo":{
                    "title":"billTo",
                    "allOf":[
                        {
                            "$ref":"#/definitions/USAddress"
                        }
                    ]
                }, ...
            }
        },
        "USAddress":{ ... }, ...
    },
    "anyOf":[
        {
            "type":"object",
            "properties":{
                "name":{
                    "$ref":"http://www.jsonix.org/jsonschemas/w3c/2001/XMLSchema.jsonschema#/definitions/QName"
                },
                "value":{
                    "$ref":"#/definitions/PurchaseOrderType"
                }
            },
            "elementName":{
                "localPart":"purchaseOrder",
                "namespaceURI":""
            }
        }
    ]
}

이제이 JSON 스키마는 원래 XML 스키마에서 파생됩니다. 정확히 1 : 1 변환은 아니지만 매우 가깝습니다.

생성 된 JSON 스키마는 생성 된 Jsonix 매핑과 일치합니다. 따라서 XML <-> JSON 변환에 Jsonix를 사용하는 경우 생성 된 JSON 스키마로 JSON의 유효성을 검사 할 수 있어야합니다. 또한 원래 XML 스키마의 모든 필수 메타 데이터 (예 : 요소, 속성 및 유형 이름)를 포함합니다.

면책 조항 : 현재 이것은 새롭고 실험적인 기능입니다. 알려진 제한 사항과 누락 된 기능이 있습니다. 그러나 나는 이것이 매우 빨리 나타나고 성숙되기를 기대하고 있습니다.

연결:


JsonSchema가 죽었습니다. openAPI를 지원할 계획이 있습니까?
Lonzak

5
@Lonzak 지금까지 계획이 없습니다. 그러나 OpenAPI 사양을 처음봤을 때 schema부분이 JSON 스키마 사양을 따르지 않습니까?
lexicore

예를 들어 Java 12에서는 작동하지 않습니다
codeKiller

8

JSON 스키마는 XML 스키마와 동등한 기능이 아닙니다. 하나에는 기능이 있지만 다른 하나에는 없습니다.

일반적으로 XML에서 JSON으로의 매핑을 만들 수 있지만 XML 스키마와 JSON 스키마의 경우는 그렇지 않습니다.

즉, XML 파일을 JSON에 매핑 한 경우 XSD가 XML의 유효성을 검사하는 것과 거의 동일한 방식으로 해당 JSON을 유효성 검사하는 JSON 스키마를 만들 수 있습니다. 그러나 그것은 직접적인 매핑이 아닙니다. 그리고 XSD가 XML의 유효성을 검사하는 것과 똑같이 JSON의 유효성을 검사한다고 보장 할 수 없습니다.

이러한 이유로 두 사양이 100 % 기능과 호환되도록 만들어지지 않는 한 XML / XSD에서 JSON / JSON 스키마로 유효성 검사 시스템을 마이그레이션하려면 사람의 개입이 필요합니다.


나는 이것을 이해하지 못한다. 예를 들어 주시겠습니까?
Fenil

4
<man name = "Fred"> <dog name = "Rex"> </ dog> </ man>과 같은 것이 있다고 가정 해 보겠습니다. Json에서 엔티티를 나타내는 매핑을 정의 할 수 있습니다. 예를 들면 다음과 같습니다. { "type": "man", name : 'Fred', pets : [{type : 'dog', name : 'Rex'}]} 그러나 동일한 세트와 일치하는 Json Schema에 대한 XSD 매핑을 구축 할 수 있다는 보장은 없습니다. 문서
에릭 하트 포드

6

면책 조항 : 저는 jgeXml의 저자입니다.

jgexml 에는 xsd2jsonXML 스키마 (XSD)와 JSON 스키마 파일 간의 변환을 수행하는 Node.js 기반 유틸리티 가 있습니다.

다른 옵션과 마찬가지로 1 : 1 변환이 아니며 JSON 스키마 유효성 검사를 개선하기 위해 출력을 직접 편집해야 할 수도 있지만 OpenAPI (swagger) 정의 내에서 복잡한 XML 스키마를 나타내는 데 사용되었습니다.

다른 답변에 제공된 purchaseorder.xsd 샘플은 다음과 같이 렌더링됩니다.

"PurchaseOrderType": {
  "type": "object",
  "properties": {
    "shipTo": {
      "$ref": "#/definitions/USAddress"
    },
    "billTo": {
      "$ref": "#/definitions/USAddress"
    },
    "comment": {
      "$ref": "#/definitions/comment"
    },
    "items": {
      "$ref": "#/definitions/Items"
    },
    "orderDate": {
      "type": "string",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*$"
    }
  },

을 사용하여 설치했습니다 npm install -g jgexml. 그런 다음 xsd2jsjon경로에 없었습니다. 나는 시도했다 node C:\Users\Oliver\AppData\Roaming\npm\node_modules\jgexml\xsd2json.js. 그러나 이것은 방금 돌아 왔습니다. 명령 줄 유틸리티가 있습니까?
koppor

그것은 직관적이라는하지만, 예를 들어 CLI는에이 아니에요testxsd2j.js
MikeRalphson

불행히도 작동하지 않으며 TypeError : Cannot set property 'additionalProperties'of null. (예를 위해 Jsonix 동일한 파일로 벌금을했다)
D.Dimitrioglo

의견을 공유 할 수 있으면 github 문제를 제기하십시오.
MikeRalphson

0

여기에서 XML 스키마를 복사하고 XML 스키마에서 JSON 스키마 를 생성하는 데 사용할 수 있는 온라인 도구에 JSON 스키마 코드를 가져옵니다 .


XML에서 XSD를 생성 할 수 있다는 것을 알지만 어쨌든 JSON-Schema를 생성 할 수는 없습니다.
NealWalters

-4

사실이지만 xmlspy를 사용하여 json을 xml로 전환 한 후 trang 응용 프로그램 (http://www.thaiopensource.com/relaxng/trang.html)을 사용하여 xml 파일에서 xsd를 만들 수 있습니다.


8
하지만 잘못된 방향으로 일어나고 그
vipw와
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.