Ответ 1
Отказ от ответственности. Я являюсь автором Jsonix, мощной библиотеки отображения XML файлов с открытым исходным кодом XML ↔ JSON.
Сегодня я выпустил новую версию компилятора Jsonix Schema Compiler с новым генератором JSON 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
Компилятор генерирует сопоставления 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-схемы (например, имя элемента, атрибута и типа).
Отказ от ответственности: На данный момент это новая и экспериментальная функция. Существуют определенные известные ограничения и недостающие функции. Но я ожидаю, что это проявится и созреет очень быстро.
Ссылки:
- Demo Order Order Project для NPM - просто проверьте и
npm install
- Документация
- Текущая версия
- Компилятор Jsonix Schema на npmjs.com