Подтвердить что ты не робот

Создание схемы Json из схемы XML (XSD)

Кто-нибудь знает, как создать схему JSON из существующей схемы XML (XSD файл)? Существуют ли какие-либо инструменты для этого?

4b9b3361

Ответ 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-схемы (например, имя элемента, атрибута и типа).

Отказ от ответственности: На данный момент это новая и экспериментальная функция. Существуют определенные известные ограничения и недостающие функции. Но я ожидаю, что это проявится и созреет очень быстро.

Ссылки:

Ответ 2

Через год после того, как этот вопрос был первоначально задан, JSON Schema остается документом IETF. На момент написания этой статьи (18 октября 2011 г.) рабочая группа пытается получить согласие по проекту 4 спецификации. Хотя существует несколько спекулятивных реализаций проверки (см. http://json-schema.org/), большинство поставщиков инструментов не вложили много усилий в инструменты, реализующие JSON Schema development, редактирование или преобразование.

Ответ 3

Схема JSON не должна быть эквивалентной функции с XML-схемой. Есть функции в одном, но не в другом.

В общем случае вы можете создать сопоставление от XML к JSON и обратно, но это не так для схемы XML и схемы JSON.

Тем не менее, если вы сопоставили XML файл с JSON, вполне возможно создать JSON-схему, которая проверяет JSON почти так же, как XSD проверяет XML. Но это не прямое отображение. И невозможно гарантировать, что он будет проверять JSON точно так же, как XSD проверяет XML.

По этой причине, и если оба спецификатора не будут совместимы с 100% совместимостью, перенос системы проверки с XML/XSD на JSON/JSON Schema потребует вмешательства человека.

Ответ 4

Отказ от ответственности: я являюсь автором 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}.*$"
    }
  },

Ответ 5

Скопируйте схему XML здесь и получите код схемы JSON онлайн-инструменты, которые доступны для создания схемы JSON из схемы XML.

Ответ 6

Правда, но после обращения json к xml с помощью xmlspy вы можете использовать приложение trang (http://www.thaiopensource.com/relaxng/trang.html) для создания xsd из xml файла (ов).