programing

XML 스키마(XSD)에서 Json 스키마 생성

instargram 2023. 3. 3. 16:51
반응형

XML 스키마(XSD)에서 Json 스키마 생성

기존 XML 스키마(XSD 파일)에서 JSON 스키마를 생성하는 방법을 아는 사람이 있습니까?사용할 수 있는 도구가 있습니까?

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

오늘 저는 새로운 JSON Schema 생성 기능을 갖춘 Jsonix Schema 컴파일러의 새로운 버전을 출시했습니다.

구매 주문 스키마를 예로 들어 보겠습니다.다음은 단편입니다.

  <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

컴파일러는 일치하는 JSON 스키마뿐만 아니라 JSonix 매핑을 생성합니다.

결과는 다음과 같습니다(간단하게 편집).

{
    "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 스키마가 generatd Jsonix 매핑과 일치합니다.따라서 XML 변환에 JSONix를 사용하는 경우 생성된 JSON 스키마를 사용하여 JSON을 검증할 수 있어야 합니다.또한 원본 XML 스키마에서 필요한 모든 메타데이터(요소, 속성 및 유형 이름 등)가 포함됩니다.

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

링크:

JSON Schema는 XML Schema와 동등한 기능을 의도하지 않았습니다.한쪽에는 기능이 있지만 다른 한쪽에는 없습니다.

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

즉, XML 파일을 JSON에 매핑하고 있는 경우, XSD가 XML을 검증하는 것과 거의 같은 방법으로 JSON 스키마를 작성할 수 있습니다.그러나 직접 매핑은 아닙니다.또한 XSD가 XML을 검증하는 것과 똑같이 JSON을 검증하는 것은 보증할 수 없습니다.

따라서 두 사양이 100% 기능 호환성이 없는 한 검증 시스템을 XML/XSD에서 JSON/JSON Schema로 이행하려면 사용자의 개입이 필요합니다.

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

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

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

다른 답변에 제시된 buchaseorder.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}.*$"
    }
  },

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

그렇습니다만, xmlspy를 사용하여 json을 xml로 변환한 후에는 trang 애플리케이션(http://www.thaiopensource.com/relaxng/trang.html)을 사용하여 xml 파일에서 xsd를 생성할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3922026/generate-json-schema-from-xml-schema-xsd

반응형