Хтось знає, як створити схему JSON із існуючої схеми XML (файл XSD)? Чи є для цього доступні інструменти?
Хтось знає, як створити схему JSON із існуючої схеми XML (файл XSD)? Чи є для цього доступні інструменти?
Відповіді:
Застереження : Я є автором Jsonix , потужної бібліотеки зіставлення XML <-> JSON з відкритим кодом.
Сьогодні я випустив нову версію компілятора схем Jsonix з новою функцією генерації схеми JSON .
Візьмемо для прикладу схему Замовлення на придбання . Ось фрагмент:
<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. Отже, якщо ви використовуєте Jsonix для XML <-> перетворення JSON, ви повинні мати можливість перевірити JSON за допомогою сформованої схеми JSON. Він також містить усі необхідні метадані із вихідної XML-схеми (як-от імена елементів, атрибутів та типів).
Застереження: На даний момент це нова та експериментальна функція. Є певні відомі обмеження та відсутні функції . Але я очікую, що це проявиться і дозріє дуже швидко.
Посилання:
npm install
schema
частини специфікації схеми JSON?
Схема JSON не має на меті еквівалент функції XML Schema. В одному є особливості, але в іншому немає.
Загалом ви можете створити зіставлення з XML у JSON і назад, але це не так для схеми XML та схеми JSON.
Тим не менш, якщо ви зіставили XML-файл із JSON, цілком можливо створити схему JSON, яка перевіряє цей JSON майже так само, як XSD перевіряє XML. Але це не пряме відображення. І неможливо гарантувати, що він перевірить JSON точно так само, як XSD перевіряє XML.
З цієї причини, якщо ці дві специфікації не зроблені на 100% сумісними з функціями, для перенесення системи перевірки із XML / XSD на схему JSON / JSON буде потрібно втручання людини.
Застереження: Я автор jgeXml.
jgexml має утиліту на основі Node.js, xsd2json
яка здійснює перетворення між XML-схемою (XSD) та файлом JSON-схеми.
Як і у випадку з іншими параметрами, це не перетворення 1: 1, і, можливо, вам доведеться вручну відредагувати висновок, щоб покращити перевірку схеми JSON, але він був використаний для представлення складної XML-схеми всередині визначення OpenAPI (swagger).
Зразок 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-схему сюди та отримайте код схеми JSON до онлайн-інструментів , доступних для створення схеми JSON із XML-схеми.