2010-10-13 10 views
47

से जेसन स्कीमा जेनरेट करें क्या कोई जानता है कि किसी मौजूदा XML स्कीमा (एक्सएसडी फ़ाइल) से JSON schema कैसे उत्पन्न करें? क्या इसके लिए कोई उपकरण उपलब्ध है?एक्सएमएल स्कीमा (एक्सएसडी)

+1

मुझे असली सवाल लगता है, "क्या JSON स्कीमा और एक्सएमएल स्कीमा के बीच मैपिंग करना संभव है?" ऑफ-विषय नहीं है। शायद सवाल को हल किया जा सकता है। –

+0

फाल्को नोगात्ज़ ने 2013 में बीएससी थीसिस किया जिसके परिणामस्वरूप [xsd2json] (https://github.com/fnogatz/xsd2json)। – supervacuo

उत्तर

10

इस सवाल के मूल रूप से पूछे जाने के एक साल बाद, जेएसओएन स्कीमा एक आईईटीएफ ड्राफ्ट दस्तावेज बना हुआ है। इस लेखन के अनुसार (18 अक्टूबर 2011) कार्यकारी समूह विनिर्देश के मसौदे 4 पर समझौता करने की कोशिश कर रहा है। यद्यपि कुछ सट्टा सत्यापन कार्यान्वयन हैं (http://json-schema.org/ देखें), अधिकांश टूल विक्रेताओं ने जेएसओएन स्कीमा विकास, संपादन या रूपांतरण को लागू करने वाले टूल में अधिक प्रयास नहीं किए हैं।

+3

नवीनतम आईईटीएफ ड्राफ्ट दस्तावेज अगस्त 2013 में समाप्त हो गए और ऐसा लगता है कि कोई भी इस प्रयास को अब तक नहीं चला रहा है। –

+0

मैं इसे पुराना मानता हूं, लेकिन ऐतिहासिक संदर्भ में भी यह पूछे जाने वाले प्रश्न का उत्तर नहीं देता है। – vossad01

-3

सच है, लेकिन xmlspy के साथ जेसन को xml में बदलने के बाद, आप xml फ़ाइल से xsd बनाने के लिए ट्रांग एप्लिकेशन (http://www.thaiopensource.com/relaxng/trang.html) का उपयोग कर सकते हैं।

+5

लेकिन यह गलत दिशा में जा रहा है – vipw

6

जेएसओएन स्कीमा एक्सएमएल स्कीमा के बराबर सुविधा का इरादा नहीं है। एक में विशेषताएं हैं लेकिन दूसरे में नहीं हैं।

सामान्य रूप से आप एक्सएमएल से जेएसओएन में एक मैपिंग बना सकते हैं और फिर से वापस आ सकते हैं, लेकिन यह एक्सएमएल स्कीमा और जेएसओएन स्कीमा का मामला नहीं है।

यह कहा गया है कि, यदि आपने जेएसओएन में एक एक्सएमएल फ़ाइल मैप की है, तो जेएसओएन स्कीमा तैयार करना काफी संभव है जो जेएसओएन को लगभग उसी तरीके से मान्य करता है जैसे एक्सएसडी एक्सएमएल को मान्य करता है। लेकिन यह प्रत्यक्ष मैपिंग नहीं है। और यह गारंटी देना संभव नहीं है कि यह जेएसओएन को वही मान्य करेगा जैसा एक्सएसडी एक्सएमएल को मान्य करता है।

इस कारण से, और जब तक कि दो चश्मे 100% सुविधा संगत न हों, एक्सएमएल/एक्सएसडी से जेएसओएन/जेएसओएन स्कीमा तक एक सत्यापन प्रणाली माइग्रेट करने के लिए मानव हस्तक्षेप की आवश्यकता होगी।

+0

मुझे यह समझ में नहीं आता है। क्या आप कृपया एक उदाहरण दे सकते हैं? – Fenil

+2

मान लीजिए कि आप की तरह <आदमी नाम = "फ्रेड"><कुत्ता नाम = "रेक्स"> कुछ है चलो आप उदाहरण के लिए, Json में इकाई का प्रतिनिधित्व करने के लिए एक मानचित्रण निर्धारित कर सकते हैं: { "type" : "आदमी", नाम: 'फ्रेड', पालतू जानवर: [{प्रकार: 'कुत्ता', नाम: 'रेक्स'}]} लेकिन, इस बात की कोई गारंटी नहीं है कि आप एक्सएसडी की जेसन स्कीमा के मैपिंग का निर्माण कर सकते हैं जो मेल खाता है दस्तावेजों का एक ही सेट –

25

अस्वीकरण: मैं Jsonix के लेखक, एक शक्तिशाली खुले स्रोत XML < हूँ -> JSON जावास्क्रिप्ट मानचित्रण पुस्तकालय।

आज मैंने 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 स्कीमा मूल XML स्कीमा से ली गई है। यह बिल्कुल 1: 1 परिवर्तन नहीं है, लेकिन बहुत करीब है।

जेनरेट जेएसओएन स्कीमा जेनरेटेड जेसनिक्स मैपिंग से मेल खाता है। तो यदि आप एक्सएमएल < -> जेएसओएन रूपांतरण के लिए जेसनिक्स का उपयोग करते हैं, तो आप जेएसओएन जेनरेट जेएसओएन स्कीमा के साथ मान्य करने में सक्षम होना चाहिए। इसमें मूल एक्सएमएल स्कीमा (जैसे तत्व, विशेषता और प्रकार के नाम) से सभी आवश्यक मेटाडेटा भी शामिल हैं।

अस्वीकरण: फिलहाल यह एक नई और प्रयोगात्मक सुविधा है।कुछ ज्ञात limitations and missing functionality हैं। लेकिन मैं उम्मीद कर रहा हूं कि यह प्रकट हो और परिपक्व हो जाए।

लिंक:

2

अस्वीकरण: मैं jgeXml के लेखक हूँ।

jgexml में नोड.जेएस आधारित उपयोगिता xsd2json है जो एक एक्सएमएल स्कीमा (एक्सएसडी) और एक JSON स्कीमा फ़ाइल के बीच एक रूपांतरण करता है।

अन्य विकल्पों के साथ, यह 1: 1 रूपांतरण नहीं है, और आपको JSON स्कीमा सत्यापन में सुधार के लिए आउटपुट को हाथ से संपादित करने की आवश्यकता हो सकती है, लेकिन इसका उपयोग ओपनएपीआई (swagger के अंदर एक जटिल XML स्कीमा का प्रतिनिधित्व करने के लिए किया गया है) परिभाषा।

"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 स्कीमा कॉपी online tools जो XML स्कीमा से JSON स्कीमा उत्पन्न करने के लिए उपलब्ध हैं करने के लिए JSON स्कीमा कोड प्राप्त:

के रूप में एक और उत्तर में दिए गए purchaseorder.xsd का एक नमूना प्रदान की गई है ।