2010-11-22 16 views
11

मेरे पास एक्सएमएल फाइलों का भार है, और उनके लिए एक एक्सएसडी है।जावा: डेटाबेस में एक्सएमएल, सबसे आसान तरीका क्या है?

मैं बस पीओजेओ में परिवर्तित करना चाहता हूं और उन्हें डेटाबेस में डालना चाहता हूं। डीबी स्कीमा मेरे नियंत्रण में है, इसलिए यह मुझे कभी भी पसंद हो सकता है।

मैंने एपिस के भार पर चारों ओर देखा है, लेकिन एक और राय चाहिए जो सबसे अच्छा काम करता है।

  • JAXB?
  • एक्सएमएलबीन?
  • XPATH से DBUnit?

क्या हाइबरनेट के पास एक्सएसडी से पीओजेओ बनाने के लिए कुछ एपीआई है, फिर एक्सएमएल को उन पीओजेओ में पढ़ें, और फिर डेटा को डेटाबेस में डालें?

या वसंत में इसके साथ मदद करने के लिए कोई सुविधा है?

मुझे लगता है कि मैं आपके विचारों के ठीक बाद हूं, बस एक एपीआई है जिसे मैंने याद किया है जो मेरी इच्छा के अनुसार मदद करेगा।

धन्यवाद जेफ पोर्टर

+0

क्या आप अपना डेटाबेस चुन सकते हैं? यदि ऐसा है, तो आप अस्तित्व-डीबी पर विचार कर सकते हैं, जो एक लोकप्रिय ओपन सोर्स एक्सएमएल डेटाबेस है। – JasonPlutext

उत्तर

0

एक आम दृष्टिकोण डेटाबेस में वस्तुओं को स्टोर करने के जेपीए (यानी EclipseLink या हाइबरनेट) का उपयोग किया जाएगा, और JAXB (यानी मेट्रो, EclipseLink MOXy (मैं तकनीक का नेतृत्व कर रहा हूँ), या जैक्सएम) ऑब्जेक्ट्स को एक्सएमएल में कनवर्ट करने के लिए।

EclipseLink JAXB (MOXY) एक्सएमएल के लिए मानचित्रण जेपीए संस्थाओं के लिए एक्सटेंशन की एक संख्या है:

3

या आप POJOs में अनुवाद करने के चरण को बायपास और के रूप में सीधे एक्सएमएल संग्रहीत कर सकती है एक सीएलओबी यह बाद में "बतख टाइपिंग" की अनुमति देगा, जिसे आप फायदेमंद पा सकते हैं।

जावा POJO को मैपिंग समझ में आता है यदि आपको व्यक्तिगत रूप से बाद में उन वस्तुओं के लिए क्वेरी करने की आवश्यकता है। यदि आपको पूरी स्ट्रीम की आवश्यकता है, हर समय, एक्सएमएल (उदा। एक्सपीएथ) में मूल्यों के लिए कभी भी पूछे बिना, तो मैं कहूंगा कि एक्सएमएल को सीएलओबी के रूप में संग्रहीत करना अधिक समझ में आता है।

+0

+1: मैं यह करूँगा, साथ ही चयनित फ़ील्ड निकालें और उन्हें अतिरिक्त _indexed_ कॉलम के रूप में स्टोर करें ताकि मैं बाद में हाई-स्पीड लुकअप कर सकूं। निकालने के लिए सही क्षेत्र निश्चित रूप से पूछे जा रहे प्रश्नों के प्रकारों पर निर्भर करेगा। –

2

त्वरित जवाब: JAXB, जेपीए और स्प्रिंग

जब एक डेटाबेस आप विचार करने के लिए डेटा है कि XML का प्रतिनिधित्व कर रहा है पर प्रदर्शन करने के लिए चाहते हैं, उसके संचालन की जरूरत में एक्सएमएल डालने।

उदाहरण के लिए, आप एक्सएमएल को इनपुट डेटा होने पर विचार कर सकते हैं और फिर एक स्कीमा बना सकते हैं जो आसानी से क्वेरी करने योग्य तरीके से डेटा रखता है। यदि आप यही करना चाहते हैं तो JAXB को unmarshaller के रूप में उपयोग करें क्योंकि आप xjc टूल के माध्यम से XSD से आसानी से एनोटेटेड pojos/इकाइयों को आसानी से उत्पन्न कर सकते हैं। कुछ अतिरिक्त जेपीए एनोटेटिंग और आपके पास एक त्वरित समाधान होगा जो एक्सएमएल को एक पूर्ण स्कीमा में मैप करता है जो विभिन्न प्रकार के मिश्रण और मिलान प्रश्नों और वैकल्पिक विचारों की अनुमति देता है। बेशक, जेएक्सबी एनोटेशन का उपयोग विभिन्न प्रकार के आउटपुट प्रारूप (एक्सएमएल, जेएसओएन, वाईएएमएल इत्यादि) उत्पन्न करने के लिए किया जा सकता है ताकि जब आप इस डेटा को आउटपुट करना चाहते हैं तो आप एक्सएमएल तक सीमित नहीं हैं।

अगला, आप एक्सएमएल को पूरी इकाई बनने के लिए विचार कर सकते हैं जिसे आप स्टोर करना चाहते हैं। उस स्थिति में आप इसे या तो सीएलओबी या एक्सएमएल (ओरेकल में) के रूप में स्टोर करना चाहते हैं।Oracle certainly supports XPath आधारित खोजों के कारण आपको परिणामी डेटासेट से पूछताछ के लिए एक अच्छा मौका मिलेगा।

अंत में, यदि आप सोच रहे हैं कि एक्सएमएल बहुत फूला हुआ है, और आप pojos में किसी भी परिणामी परिवर्तन के नियंत्रण में हैं, तो आप सीधे बीएमओबी के रूप में डेटाबेस में unmarshalled pojos को क्रमबद्ध कर सकते हैं। आपके पास काफी कॉम्पैक्ट स्कीमा और डेटाबेस होगा, लेकिन जब आप पूछताछ की बात करेंगे तो आपको भुगतना होगा क्योंकि यह सब बाइनरी होगा। और यदि आपको पुरानी pojos के आधार पर एक बहुत पुराने डेटासेट को deserialize करना है, तो आप बाद में बाइनरी संस्करण संगतता मुद्दों पर होगा।

तो संक्षेप में, जेएक्सबी अनारशनलिंग और बाद में मार्शलिंग प्रक्रियाओं को संभालने का एक बहुत अच्छा तरीका है। यह तेज़ और सरल है और (@Blaise Doughan पर ध्यान दें) एक चीज़ के लिए SO पर बहुत अच्छी तरह से समर्थित है। जेपीए आपके डेटाबेस संचालन करने के लिए पसंद की तकनीक है। हाइबरनेट जेपीए (अच्छे एक्सटेंशन के साथ) का एक कार्यान्वयनकर्ता है, और वसंत इसे HibernateTemplate के माध्यम से खूबसूरती से समर्थन करता है। समान रूप से, आप स्प्रिंग के जेपीएम्प्लेट का उपयोग कर सकते हैं, जो शायद थोड़ा सा सीखने वाला वक्र है।

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