2009-02-12 13 views
10

से रूबी क्लासेस जेनरेट करें क्या एक्सएसडी से रुबी कक्षाएं (शायद यहां तक ​​कि सक्रिय संसाधन कक्षाएं) उत्पन्न करने का कोई तरीका है ताकि उनमें कक्षाएं प्रारंभिक एक्सएसडी के लिए कक्षाओं को xml में क्रमबद्ध करने का एक तरीका हो?एक्सएसडी

मुझे पता है कि साबुन 4r में xsd2ruby है लेकिन ऐसा लगता है कि उत्पन्न रूबी वर्गों को आसानी से xml में क्रमबद्ध नहीं किया जा सकता है।

+0

एक तरीका है कि आप सक्रिय रेकॉर्ड क्लास-ऑब्जेक्ट्स को xml में क्रमबद्ध कर सकते हैं। लेकिन मुझे नहीं लगता कि आप उस तरह के कुछ ढूंढ रहे हैं। – Chirantan

उत्तर

3

ऐसा प्रतीत होता है कि यह काम कर सकता है।

'XSD/मानचित्रण' XSD :: Mapping.obj2xml (xsdBasedObject)

5

बेशर्म आत्म पदोन्नति (उम्मीद है कि इस stackoverflow पर ठीक है), लेकिन मैं एक खुला स्रोत परियोजना पर काम कर रहा हूँ बस that

करने के लिए आवश्यकता होती है

यह अभी भी एक काम प्रगति पर है (पैच भेजने के लिए स्वतंत्र महसूस करें) लेकिन अंतिम लक्ष्य एक्सएसडी को रुबी कक्षाओं से (या जो अब करता है) में परिवर्तित करना है और उन कक्षाओं के उदाहरणों से एक्सएसडी के अनुरूप एक्सएमएल को परिवर्तित करना है।

5

मार्क,

हालांकि इस थोड़ी देर पहले कहा गया था, मैं एक समाधान में आए और सोचा था कि यह भविष्य में लोगों को मदद कर सकता है।

मेरी आवश्यकता समान थी। मेरे पास एक सहयोगी से एक .xsd है और इससे क्लास फ़ाइल जेनरेट करना चाहूंगा। मेरी आशा है कि मैं आसानी से ऑब्जेक्ट को मार्शल कर पाऊंगा और इसे अपने रीस्टफुल एंड-पॉइंट पर पास कर पाऊंगा, जहां उसका जावा सर्वर पेलोड को उतार देगा और बिना किसी अतिरिक्त प्रयास के गतिशील रूप से ऑब्जेक्ट का निर्माण करेगा।

मुझे मिला समाधान मुझे https://github.com/rubyjedi/soap4r से soap4r प्राप्त करना था। मैं बिन निर्देशिका निष्पादन में दो * .rb फ़ाइलें बनाया और फिर भाग गया:

bin/xsd2ruby.rb --xsd <source>.xsd --classdef <filename_prefix> 

यह xsd:complexType एक वर्ग के रूप में कार्यान्वित से प्रत्येक के साथ एक नई फ़ाइल उत्पन्न। अन्य सभी जटिल प्रकार भी सही विरासत संबंधों के साथ उत्पन्न हुए थे और सभी xsd:element को एक आवृत्ति चर के रूप में परिभाषित किया गया था और एक क्लास प्रारंभकर्ता भी परिभाषित किया गया था।

से ही चल रहा है xsd2ruby.rb झुकेंगे विकल्प:

~/src/test/soap4r:bin/xsd2ruby.rb 
Usage: bin/xsd2ruby.rb --xsd xsd_location [options] 
    xsd_location: filename or URL 

Example: 
    bin/xsd2ruby.rb --xsd myapp.xsd --classdef foo 

Options: 
    --xsd xsd_location 
    --classdef [filenameprefix] 
    --mapping_registry 
    --mapper 
    --module_path [Module::Path::Name] 
    --force 
    --quiet 

पूर्णता के लिए के लिए, मैं के साथ मेरी कक्षा बढ़ाया निम्नलिखित (यह एक "संभावना" वर्ग है):

class Prospect 
    include Enumerable 
    def each(&block) 
    self.instance_variables.collect{|v| (v.gsub /@/, '').to_sym }.each(&block) 
    end 
end 

यह मुझे इसे Net::HTTP::Post अनुरोध के शरीर के रूप में उपयोग करने दें।

एक मुफ्त to_xml के प्रश्न के लिए: मुझे यह नहीं मिला है। रूबी ऑब्जेक्ट बॉक्स के बाहर to_yaml और to_json के साथ आता है, लेकिन मुझे XML में कोई आसान रूपांतरण नहीं मिला है। तो यह मेरे खुद के "to_xml" रोल में आया।

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे