2010-10-13 2 views
47

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

+1

Я думаю, что реальный вопрос: «Можно ли сделать сопоставление между схемой JSON и XML-схемой?» не вне темы. Возможно, этот вопрос можно было бы переформулировать. –

+0

В 2013 году Фалько Ногац сделал диплом бакалавра, в результате чего [xsd2json] (https://github.com/fnogatz/xsd2json). – supervacuo

ответ

10

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

+3

Последние документы проекта IETF истек в августе 2013 года, и, похоже, никто больше не предпринимает этих усилий. –

+0

Я даю, что это старо, но даже в историческом контексте это не отвечает на заданный вопрос. – vossad01

-3

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

+5

, но это происходит не в том направлении – vipw

6

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

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

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

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

+0

Я не понимаю этого. Можете ли вы привести пример? – Fenil

+2

Допустим, у вас есть что-то вроде <человек имя = «Fred»><собаки имени = «Rex»> Вы можете определить отображение представлять объект в Json, например: { «типа» : «человек», имя: «Фред», домашние животные: [{type: 'dog', name: 'Rex'}]} Но нет никакой гарантии, что вы можете построить сопоставление XSD с Json Schema, которое соответствует тот же набор документов –

25

Отказ от ответственности: Я являюсь автором Jsonix, мощный открытым исходным кодом XML < -> JSON JavaScript библиотека отображение.

Сегодня я выпустил новую версию Jsonix Schema Compiler с новой функцией JSON Schema generation.

Возьмем, например, схему Purchase Order. Вот фрагмент:

<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 mappings а также matching JSON Schema.

Вот что результат выглядит (отредактированный для краткости):

{ 
    "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 Schema является производным от исходного XML-схемы. Это не совсем 1: 1 трансформация, но очень близкая.

Сгенерированная схема JSON соответствует образующим Jsonix-сопоставлениям. Поэтому, если вы используете Jsonix для XML < -> JSON conversion, вы должны иметь возможность проверить JSON с помощью сгенерированной схемы JSON. Он также содержит все необходимые метаданные из исходной XML-схемы (например, имя элемента, атрибута и типа).

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

Ссылки:

2

Отказ от ответственности: Я автор jgeXml.

jgexml Утилита xsd2json имеет Node.js, которая выполняет преобразование между 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}.*$" 
    } 
    }, 
0

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

Смежные вопросы