2010-10-13 49 views
47

Có ai biết cách tạo ra một JSON schema từ một lược đồ XML hiện có (tệp XSD) không? Có công cụ nào cho việc này không?Tạo lược đồ Json từ lược đồ XML (XSD)

+1

Tôi nghĩ rằng câu hỏi thực sự, "Có thể lập bản đồ giữa JSON Schema và Lược đồ XML không?" không phải là chủ đề. Có lẽ câu hỏi có thể được viết lại. –

+0

Falco Nogatz đã làm luận án Cử nhân năm 2013 dẫn đến [xsd2json] (https://github.com/fnogatz/xsd2json). – supervacuo

Trả lời

10

Một năm sau câu hỏi này ban đầu được yêu cầu, Lược đồ JSON vẫn là tài liệu dự thảo IETF. Theo văn bản này (18 tháng 10 năm 2011) nhóm làm việc đang cố gắng để có được thỏa thuận về dự thảo 4 của đặc điểm kỹ thuật. Mặc dù có một vài triển khai xác thực đầu cơ (xem http://json-schema.org/), hầu hết các nhà cung cấp công cụ đã không đầu tư nhiều công sức vào các công cụ thực hiện phát triển, chỉnh sửa hoặc chuyển đổi JSON Schema.

+3

Tài liệu dự thảo IETF mới nhất đã hết hạn vào tháng 8 năm 2013 và dường như không có ai theo đuổi nỗ lực này nữa. –

+0

Tôi cấp điều này là cũ, nhưng ngay cả trong bối cảnh lịch sử, điều này không trả lời câu hỏi được hỏi. – vossad01

-3

Đúng, nhưng sau khi chuyển json thành xml với xmlspy, bạn có thể sử dụng ứng dụng trang (http://www.thaiopensource.com/relaxng/trang.html) để tạo xsd từ tệp xml (s).

+5

nhưng điều đó sai hướng – vipw

6

Giản đồ JSON không có ý định là đối tượng địa lý tương đương với Lược đồ XML. Có một số tính năng trong một nhưng không phải trong các khác.

Nói chung, bạn có thể tạo ánh xạ từ XML sang JSON và ngược lại, nhưng đó không phải là trường hợp đối với lược đồ XML và lược đồ JSON.

Điều đó nói rằng, nếu bạn đã ánh xạ một tệp XML thành JSON, bạn có thể tạo một JSON Schema để xác nhận hợp lệ JSON gần giống như cách XSD xác nhận hợp lệ XML. Nhưng nó không phải là một bản đồ trực tiếp. Và không thể đảm bảo rằng nó sẽ xác nhận hợp lệ JSON giống như XSD xác nhận hợp lệ XML. Vì lý do này, và trừ khi hai thông số kỹ thuật được thực hiện là 100% tính năng tương thích, việc di chuyển một hệ thống xác nhận từ XML/XSD sang JSON/JSON Schema sẽ yêu cầu sự can thiệp của con người.

+0

Tôi không hiểu điều này. Bạn có thể đưa ra một ví dụ không? – Fenil

+2

Hãy nói rằng bạn có một cái gì đó giống như Bạn có thể xác định một ánh xạ để đại diện cho tổ chức trong Json, ví dụ: { "gõ" : "người đàn ông", tên: 'Fred', vật nuôi: [{type: 'dog', tên: 'Rex'}]} Nhưng, không có gì đảm bảo bạn có thể tạo bản đồ XSD thành Json Schema khớp với cùng một bộ tài liệu –

25

Tuyên bố từ chối: Tôi là tác giả của Jsonix, một thư viện ánh xạ JavaScript mã nguồn mở mạnh mẽ < -> JSON.

Hôm nay tôi đã phát hành phiên bản mới của Jsonix Schema Compiler, với tính năng JSON Schema generation mới.

Ví dụ: hãy lấy ví dụ Purchase Order. Dưới đây là một đoạn:

<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> 

Bạn có thể biên dịch giản đồ này bằng cách sử dụng công cụ dòng lệnh cung cấp:

java -jar jsonix-schema-compiler-full.jar 
    -generateJsonSchema 
    -p PO 
    schemas/purchaseorder.xsd 

Trình biên dịch tạo ra Jsonix mappings cũng như các matching JSON Schema.

Đây là những gì kết quả sẽ như thế nào (thay đổi nội dung cho ngắn gọn):

{ 
    "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":"" 
      } 
     } 
    ] 
} 

Bây giờ Schema JSON này có nguồn gốc từ XML Schema gốc. Nó không phải là chính xác 1: 1 chuyển đổi, nhưng rất rất gần.

Lược đồ JSON được tạo khớp với ánh xạ tổng hợp Jsonix. Vì vậy, nếu bạn sử dụng Jsonix cho chuyển đổi JSON < -> JSON, bạn sẽ có thể xác thực JSON bằng JSON Schema đã tạo. Nó cũng chứa tất cả siêu dữ liệu cần thiết từ Lược đồ XML có nguồn gốc (như tên phần tử, thuộc tính và loại).

Tuyên bố từ chối trách nhiệm: Hiện tại đây là tính năng mới và thử nghiệm.Có một số được biết đến limitations and missing functionality. Nhưng tôi hy vọng điều này thể hiện và trưởng thành rất nhanh.

Links:

2

Disclaimer: Tôi là tác giả của jgeXml.

jgexml có tiện ích dựa trên Node.js xsd2json thực hiện chuyển đổi giữa lược đồ XML (XSD) và tệp lược đồ JSON. Cũng như các tùy chọn khác, nó không phải là chuyển đổi 1: 1 và bạn có thể cần phải chỉnh sửa đầu ra để cải thiện xác thực lược đồ JSON, nhưng nó đã được sử dụng để biểu diễn một lược đồ XML phức tạp bên trong một OpenAPI (vênh vang) Định nghĩa.

Một mẫu của purchaseorder.xsd đưa ra trong câu trả lời khác được render thành:

"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

Sao chép lược đồ XML của bạn ở đây & lấy mã schema JSON đến online tools đó có sẵn để tạo schema JSON từ lược đồ XML .

Các vấn đề liên quan