2012-03-27 9 views
18

मैं जेएसओएन पाठ के रूप में एक डीएजी का प्रतिनिधित्व करना चाहता हूं और सोच रहा हूं कि किसी ने भी यह कोशिश की है और यदि JSON वास्तव में एक डीएजी है तो यह सत्यापित करने के संबंध में किसी भी समस्या का सामना करना पड़ता है।आप डायरेक्टेड एसाइक्लिक ग्राफ (डीएजी) को JSON के रूप में कैसे स्टोर करते हैं?

+0

यदि डीएजी सही है तो डीएजी के पास एक भी रूट नहीं हो सकती है। तो अगर आप सुनिश्चित नहीं हैं कि आप इसे देखते हैं तो मॉडल को कैसे सूखाते हैं। –

+0

कोई भी JSON ऑब्जेक्ट निश्चित रूप से एक डीएजी होगा। – Pointy

उत्तर

24

प्रत्येक नोड को लेबल करें और किनारे की सूची बनाएं। यही कारण है, प्रत्येक नोड की दुकान के लिए नोड्स इसे करने के लिए किनारों है, उदाहरण के लिए:

{ 
    "a": [ "b", "c", "d" ], 
    "b": [ "d" ], 
    "c": [ "d" ], 
    "d": [ ] 
} 

आप रेखांकन के कई प्रकार इस तरह से स्टोर कर सकते हैं, बस नहीं DAGs, ताकि आप इसे बनाने के लिए पोस्ट-प्रक्रिया की आवश्यकता होगी सुनिश्चित करें कि इसमें कोई लूप नहीं है। बस एक नोड, डीएफएस चुनें, यदि आप किसी भी नोड को एक से अधिक बार देखते हैं तो यह एक डीएजी नहीं है। फिर उन सभी नोड्स को हटा दें जिन्हें आपने अभी देखा और किसी भी शेष नोड्स के साथ दोहराएं। ऐसा तब तक करें जब तक आपको लूप न मिले या आपने सभी नोड्स को हटा दिया हो, बाद के मामले में ग्राफ एक डीएजी है।

ध्यान दें कि यह पैरेंट नोड्स को स्टोर नहीं करता है, क्योंकि यह अनावश्यक जानकारी है। यदि आपको उस डेटा की आवश्यकता है तो आप ग्राफ को लोड करने के बाद उत्पन्न कर सकते हैं।

+0

क्या इसे उलटा करने के लिए कोई नकारात्मक पक्ष है (सरणी मान "से" के बजाय "नोड्स" से होने वाले हैं)? मुझे लगता है कि यदि आप एक टोपोलॉजिकल सॉर्ट करने की कोशिश कर रहे हैं तो यह बेहतर होगा। –

1

कड़ाई से बोलते हुए आप सीधे जेएसओएन के साथ ऐसा नहीं कर सकते हैं। आपको ऑब्जेक्ट्स का प्रतिनिधित्व करने के अपने तरीके से आना होगा जिसे डेटा संरचना में कहीं और संदर्भ द्वारा पहचाना जा सकता है, और फिर आपको JSON स्ट्रिंग को deserializing के परिणाम को पोस्ट-प्रोसेस करना होगा।

आपको लगता है कि JSON अभिव्यक्ति वस्तु ग्राफ है, और वहाँ बस धारणा व्यक्त करने के लिए कोई प्रावधान नहीं है कि एक संपत्ति के मूल्य कहीं और एक और संपत्ति के मूल्य होना चाहिए सरल कारण के लिए JSON के साथ यह नहीं कर सकते डेटा संरचना में। इसे एक और तरीके से रखने के लिए, ग्राफ में किसी ऑब्जेक्ट में एक से अधिक माता-पिता नहीं हो सकते हैं, जिसका अर्थ है कि प्रत्येक ऑब्जेक्ट एक अन्य ऑब्जेक्ट की बिल्कुल एक संपत्ति का मूल्य है।

+2

एक डीएजी में, एक नोड में दो माता-पिता हो सकते हैं। प्रोग्रामिंग भाषा में एक अभिव्यक्ति के प्रतिनिधित्व के बारे में सोचें (कहें, जावास्क्रिप्ट :-) एक एकल चर के दो संदर्भों के साथ। परंपरागत रूप से, अभिव्यक्ति में उन दो बिंदुओं को एक ही नोड का संदर्भ दिया जाएगा। एक डीएजी (परिभाषा के अनुसार) में कोई चक्र नहीं है क्योंकि (आमतौर पर, जरूरी नहीं कि मुझे लगता है) सभी लिंक ग्राफ को "इंगित करें", ताकि आप कभी भी "बैक अप न करें"। यह एक पेड़ की तरह है, सिवाय इसके कि जहां नोड्स विलय हो जाते हैं। – Pointy

+0

हा हा अच्छा है कि टिप्पणी चक्र के साथ होने के बारे में एक सवाल के जवाब में थी, इसलिए मैं इसे वहां छोड़ दूंगा। – Pointy

+0

हां, मेरे भाग पर बुनियादी सीएस समझ विफलता ;-) व्याख्या करने के लिए धन्यवाद। –

3

जेएसओएन के पास डीएजी का प्रतिनिधित्व करने की कोई मूल सुविधा नहीं है जब तक आप लिंक किए गए डेटा का प्रतिनिधित्व करने के लिए अपना स्वयं का सम्मेलन नहीं करते। जेएसओएन-एलडी (एक डब्ल्यू 3 सी प्रस्ताव) एक जेएसओएन एक्सटेंशन है जो वास्तव में ऐसा करने की कोशिश कर रहा है। प्रस्ताव यहां पाया जा सकता है: http://json-ld.org/spec/latest/json-ld/

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

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