मैं एक जेसन स्कीमा दस्तावेज़ में कहीं भी $ भूमिका गुणों की अनुमति देना चाहता हूं जहां प्रकार की अनुमति है। सिद्धांत रूप में मुझे इसे नीचे के रूप में विस्तारित करने में सक्षम होना चाहिए जहां मैं जेसन स्कीमा मेटा-स्कीमा और $ भूमिका के लिए मेरे एक्सटेंशन दोनों के खिलाफ सभी करता हूं जिसमें मेरे एक्सटेंशन मेटा-स्कीमा को दोबारा लेने के लिए अतिरिक्त गुण शामिल हैं। मुझे जो मिला वह यह है कि मुझे शीर्ष-स्तरीय $ भूमिका के लिए सत्यापन मिलता है, लेकिन किसी भी एम्बेडेड के लिए नहीं। क्या मैं कुछ भूल रहा हूँ? क्या कोई और तरीका है जिससे मुझे JSON स्कीमा मेटा-स्कीमा का विस्तार करना चाहिए?

मैंने विभिन्न सत्यापनकर्ताओं के समूह की कोशिश की है और वे सभी उदाहरण में दूसरी $ भूमिका को मान्य करने में विफल हैं।

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "definitions": {
        "role": {
            "type": "string",
            "pattern": "^((lg)|(unionType\\([a-zA-Z][a-zA-Z0-9.]*\\)))$"
        },
    },
    "allOf": [
        {
            "$ref": "http://json-schema.org/draft-07/schema#"
        },
        {
            "properties": {
                "additionalProperties": {
                    "$ref": "#"
                },
                "$role": {
                    "oneOf": [
                        {
                            "$ref": "#/definitions/role"
                        },
                        {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/role"
                            }
                        }
                    ]
                }
            }
        }
    ]
}

इस स्कीमा का उपयोग कर उदाहरण:

{
    "$schema": "schema.json",
    "title": "Prompt",
    "$role": "unionType(Microsoft.IPrompt)",
    "properties": {
        "prompt": {
            "type": "string",
            "$role":"foo"
        }
    }
}

मैं जो अपेक्षा करता हूं वह यह है कि दूसरी भूमिका स्कीमा के अनुसार अमान्य होनी चाहिए। मुझे जो मिलता है वह यह है कि यह मान्य है, भले ही यह $ भूमिका पैटर्न से मेल नहीं खाता। पहली $ भूमिका सफलतापूर्वक मान्य होती है।

0
Chris McConnell 16 फरवरी 2019, 04:26

1 उत्तर

सबसे बढ़िया उत्तर

हां, मेटा स्कीमा का विस्तार करना जितना लगता है उससे कहीं अधिक जटिल है। विस्तार करने के तरीके के उदाहरण के लिए JSON Hyper-Schema मेटा स्कीमा चेकआउट करें एक मेटा स्कीमा। JSON हाइपर-स्कीमा दो कीवर्ड जोड़ता है: base और `लिंक। स्कीमा का विस्तार करते समय, आपको मूल स्कीमा में उपयोग किए गए किसी भी पुनरावर्ती संदर्भ को फिर से परिभाषित करने की आवश्यकता होती है।

JSON स्कीमा (मेटा-स्कीमा सहित) अपरिवर्तनीय हैं। आप मौजूदा स्कीमा को चुनिंदा रूप से संशोधित नहीं कर सकते। आपका मेटा स्कीमा केवल $role कीवर्ड को मान्य करता है, अन्य सभी कीवर्ड ड्राफ्ट-07 मेटा स्कीमा द्वारा मान्य हैं। चूंकि आपका मेटा स्कीमा ड्राफ्ट-07 स्कीमा को संशोधित नहीं करता है, properties जैसे कीवर्ड पूरी तरह से ड्राफ्ट-07 स्कीमा के संदर्भ में और आपके द्वारा किसी अन्य स्कीमा में जोड़े गए नए कीवर्ड की जानकारी के बिना मान्य हैं।

यह दुर्भाग्यपूर्ण है कि स्कीमा के विस्तार में इतना दोहराव शामिल है और यह एक ऐसी समस्या है जिस पर काम किया जा रहा है। इसे आसान बनाने का एक संभावित समाधान अगले मसौदे में पेश किया जाएगा।

2
Jason Desrosiers 17 फरवरी 2019, 17:58