누구든지 기존 XML 스키마 (XSD 파일)에서 JSON 스키마 를 생성하는 방법을 알고 있습니까? 이를 위해 사용할 수있는 도구가 있습니까?
누구든지 기존 XML 스키마 (XSD 파일)에서 JSON 스키마 를 생성하는 방법을 알고 있습니까? 이를 위해 사용할 수있는 도구가 있습니까?
답변:
면책 조항 : 저는 강력한 오픈 소스 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 스키마의 모든 필수 메타 데이터 (예 : 요소, 속성 및 유형 이름)를 포함합니다.
면책 조항 : 현재 이것은 새롭고 실험적인 기능입니다. 알려진 제한 사항과 누락 된 기능이 있습니다. 그러나 나는 이것이 매우 빨리 나타나고 성숙되기를 기대하고 있습니다.
연결:
npm install
schema
부분이 JSON 스키마 사양을 따르지 않습니까?
JSON 스키마는 XML 스키마와 동등한 기능이 아닙니다. 하나에는 기능이 있지만 다른 하나에는 없습니다.
일반적으로 XML에서 JSON으로의 매핑을 만들 수 있지만 XML 스키마와 JSON 스키마의 경우는 그렇지 않습니다.
즉, XML 파일을 JSON에 매핑 한 경우 XSD가 XML의 유효성을 검사하는 것과 거의 동일한 방식으로 해당 JSON을 유효성 검사하는 JSON 스키마를 만들 수 있습니다. 그러나 그것은 직접적인 매핑이 아닙니다. 그리고 XSD가 XML의 유효성을 검사하는 것과 똑같이 JSON의 유효성을 검사한다고 보장 할 수 없습니다.
이러한 이유로 두 사양이 100 % 기능과 호환되도록 만들어지지 않는 한 XML / XSD에서 JSON / JSON 스키마로 유효성 검사 시스템을 마이그레이션하려면 사람의 개입이 필요합니다.
면책 조항 : 저는 jgeXml의 저자입니다.
jgexml 에는 xsd2json
XML 스키마 (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
. 그러나 이것은 방금 돌아 왔습니다. 명령 줄 유틸리티가 있습니까?
testxsd2j.js
여기에서 XML 스키마를 복사하고 XML 스키마에서 JSON 스키마 를 생성하는 데 사용할 수 있는 온라인 도구에 JSON 스키마 코드를 가져옵니다 .