Compiling an XmlSchemaSet with imported schemas












2















I'm trying to create an XmlSchemaSet against the SAML 2.0 set of schema definitions, starting with the protocol schema here: https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd



var set = new XmlSchemaSet();

XmlSchema schema;
using (var reader = XmlReader.Create(
"https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
{
schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
}

set.Add(schema);

set.Compile();


When Compile is called, the following exception is thrown:



System.Xml.Schema.XmlSchemaException
Type 'urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType' is not declared.
at System.Xml.Schema.XmlSchemaSet.InternalValidationCallback(Object sender, ValidationEventArgs e)
at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e)
at System.Xml.Schema.Compiler.CompileElement(XmlSchemaElement xe)
at System.Xml.Schema.Compiler.Compile()
at System.Xml.Schema.Compiler.Execute(XmlSchemaSet schemaSet, SchemaInfo schemaCompiledInfo)
at System.Xml.Schema.XmlSchemaSet.Compile()
at XSD.Program.Main(String args)


The type specified urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType appears in the namespace imported at the top of the schema:



<import
namespace="urn:oasis:names:tc:SAML:2.0:assertion"
schemaLocation="saml-schema-assertion-2.0.xsd"/>


Using Fiddler, I can't see the application making any attempts at retrieving the imported schema.



Why don't these import statements appear to be working with the XmlSchemaSet?










share|improve this question





























    2















    I'm trying to create an XmlSchemaSet against the SAML 2.0 set of schema definitions, starting with the protocol schema here: https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd



    var set = new XmlSchemaSet();

    XmlSchema schema;
    using (var reader = XmlReader.Create(
    "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
    {
    schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
    }

    set.Add(schema);

    set.Compile();


    When Compile is called, the following exception is thrown:



    System.Xml.Schema.XmlSchemaException
    Type 'urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType' is not declared.
    at System.Xml.Schema.XmlSchemaSet.InternalValidationCallback(Object sender, ValidationEventArgs e)
    at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
    at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e)
    at System.Xml.Schema.Compiler.CompileElement(XmlSchemaElement xe)
    at System.Xml.Schema.Compiler.Compile()
    at System.Xml.Schema.Compiler.Execute(XmlSchemaSet schemaSet, SchemaInfo schemaCompiledInfo)
    at System.Xml.Schema.XmlSchemaSet.Compile()
    at XSD.Program.Main(String args)


    The type specified urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType appears in the namespace imported at the top of the schema:



    <import
    namespace="urn:oasis:names:tc:SAML:2.0:assertion"
    schemaLocation="saml-schema-assertion-2.0.xsd"/>


    Using Fiddler, I can't see the application making any attempts at retrieving the imported schema.



    Why don't these import statements appear to be working with the XmlSchemaSet?










    share|improve this question



























      2












      2








      2








      I'm trying to create an XmlSchemaSet against the SAML 2.0 set of schema definitions, starting with the protocol schema here: https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd



      var set = new XmlSchemaSet();

      XmlSchema schema;
      using (var reader = XmlReader.Create(
      "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
      {
      schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
      }

      set.Add(schema);

      set.Compile();


      When Compile is called, the following exception is thrown:



      System.Xml.Schema.XmlSchemaException
      Type 'urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType' is not declared.
      at System.Xml.Schema.XmlSchemaSet.InternalValidationCallback(Object sender, ValidationEventArgs e)
      at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
      at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e)
      at System.Xml.Schema.Compiler.CompileElement(XmlSchemaElement xe)
      at System.Xml.Schema.Compiler.Compile()
      at System.Xml.Schema.Compiler.Execute(XmlSchemaSet schemaSet, SchemaInfo schemaCompiledInfo)
      at System.Xml.Schema.XmlSchemaSet.Compile()
      at XSD.Program.Main(String args)


      The type specified urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType appears in the namespace imported at the top of the schema:



      <import
      namespace="urn:oasis:names:tc:SAML:2.0:assertion"
      schemaLocation="saml-schema-assertion-2.0.xsd"/>


      Using Fiddler, I can't see the application making any attempts at retrieving the imported schema.



      Why don't these import statements appear to be working with the XmlSchemaSet?










      share|improve this question
















      I'm trying to create an XmlSchemaSet against the SAML 2.0 set of schema definitions, starting with the protocol schema here: https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd



      var set = new XmlSchemaSet();

      XmlSchema schema;
      using (var reader = XmlReader.Create(
      "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
      {
      schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
      }

      set.Add(schema);

      set.Compile();


      When Compile is called, the following exception is thrown:



      System.Xml.Schema.XmlSchemaException
      Type 'urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType' is not declared.
      at System.Xml.Schema.XmlSchemaSet.InternalValidationCallback(Object sender, ValidationEventArgs e)
      at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e, XmlSeverityType severity)
      at System.Xml.Schema.BaseProcessor.SendValidationEvent(XmlSchemaException e)
      at System.Xml.Schema.Compiler.CompileElement(XmlSchemaElement xe)
      at System.Xml.Schema.Compiler.Compile()
      at System.Xml.Schema.Compiler.Execute(XmlSchemaSet schemaSet, SchemaInfo schemaCompiledInfo)
      at System.Xml.Schema.XmlSchemaSet.Compile()
      at XSD.Program.Main(String args)


      The type specified urn:oasis:names:tc:SAML:2.0:assertion:EncryptedElementType appears in the namespace imported at the top of the schema:



      <import
      namespace="urn:oasis:names:tc:SAML:2.0:assertion"
      schemaLocation="saml-schema-assertion-2.0.xsd"/>


      Using Fiddler, I can't see the application making any attempts at retrieving the imported schema.



      Why don't these import statements appear to be working with the XmlSchemaSet?







      c# xsd .net-core






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 27 '18 at 17:29







      Paul Turner

















      asked Nov 27 '18 at 17:22









      Paul TurnerPaul Turner

      25.5k1180142




      25.5k1180142
























          1 Answer
          1






          active

          oldest

          votes


















          0














          The default behaviour of the XmlSchemaSet is to not try to resolve any external schemas. To this this, the XmlResolver property must be set. The go-to resolver implementation is XmlUrlResolver:



          set.XmlResolver = new XmlUrlResolver();


          The important thing is to set this property before adding any schemas to the set. The call to Add performs "pre-processing" on the schema, which includes resolving any import statements. Assigning the XmlResolver after calling Add appears to have no effect.



          The application code needs to be:



          var set = new XmlSchemaSet
          {
          // Enable resolving of external schemas.
          XmlResolver = new XmlUrlResolver()
          };

          XmlSchema schema;
          using (var reader = XmlReader.Create(
          "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
          {
          schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
          }

          set.Add(schema);

          set.Compile();


          NOTE The above code still does not actually produce the desired result due to problems loading the schemas from w3.org, however the imported SAML schema is resolved successfully.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53504982%2fcompiling-an-xmlschemaset-with-imported-schemas%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            The default behaviour of the XmlSchemaSet is to not try to resolve any external schemas. To this this, the XmlResolver property must be set. The go-to resolver implementation is XmlUrlResolver:



            set.XmlResolver = new XmlUrlResolver();


            The important thing is to set this property before adding any schemas to the set. The call to Add performs "pre-processing" on the schema, which includes resolving any import statements. Assigning the XmlResolver after calling Add appears to have no effect.



            The application code needs to be:



            var set = new XmlSchemaSet
            {
            // Enable resolving of external schemas.
            XmlResolver = new XmlUrlResolver()
            };

            XmlSchema schema;
            using (var reader = XmlReader.Create(
            "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
            {
            schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
            }

            set.Add(schema);

            set.Compile();


            NOTE The above code still does not actually produce the desired result due to problems loading the schemas from w3.org, however the imported SAML schema is resolved successfully.






            share|improve this answer




























              0














              The default behaviour of the XmlSchemaSet is to not try to resolve any external schemas. To this this, the XmlResolver property must be set. The go-to resolver implementation is XmlUrlResolver:



              set.XmlResolver = new XmlUrlResolver();


              The important thing is to set this property before adding any schemas to the set. The call to Add performs "pre-processing" on the schema, which includes resolving any import statements. Assigning the XmlResolver after calling Add appears to have no effect.



              The application code needs to be:



              var set = new XmlSchemaSet
              {
              // Enable resolving of external schemas.
              XmlResolver = new XmlUrlResolver()
              };

              XmlSchema schema;
              using (var reader = XmlReader.Create(
              "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
              {
              schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
              }

              set.Add(schema);

              set.Compile();


              NOTE The above code still does not actually produce the desired result due to problems loading the schemas from w3.org, however the imported SAML schema is resolved successfully.






              share|improve this answer


























                0












                0








                0







                The default behaviour of the XmlSchemaSet is to not try to resolve any external schemas. To this this, the XmlResolver property must be set. The go-to resolver implementation is XmlUrlResolver:



                set.XmlResolver = new XmlUrlResolver();


                The important thing is to set this property before adding any schemas to the set. The call to Add performs "pre-processing" on the schema, which includes resolving any import statements. Assigning the XmlResolver after calling Add appears to have no effect.



                The application code needs to be:



                var set = new XmlSchemaSet
                {
                // Enable resolving of external schemas.
                XmlResolver = new XmlUrlResolver()
                };

                XmlSchema schema;
                using (var reader = XmlReader.Create(
                "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
                {
                schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
                }

                set.Add(schema);

                set.Compile();


                NOTE The above code still does not actually produce the desired result due to problems loading the schemas from w3.org, however the imported SAML schema is resolved successfully.






                share|improve this answer













                The default behaviour of the XmlSchemaSet is to not try to resolve any external schemas. To this this, the XmlResolver property must be set. The go-to resolver implementation is XmlUrlResolver:



                set.XmlResolver = new XmlUrlResolver();


                The important thing is to set this property before adding any schemas to the set. The call to Add performs "pre-processing" on the schema, which includes resolving any import statements. Assigning the XmlResolver after calling Add appears to have no effect.



                The application code needs to be:



                var set = new XmlSchemaSet
                {
                // Enable resolving of external schemas.
                XmlResolver = new XmlUrlResolver()
                };

                XmlSchema schema;
                using (var reader = XmlReader.Create(
                "https://docs.oasis-open.org/security/saml/v2.0/saml-schema-protocol-2.0.xsd"))
                {
                schema = XmlSchema.Read(reader, (sender, e) => Console.WriteLine(e.Message));
                }

                set.Add(schema);

                set.Compile();


                NOTE The above code still does not actually produce the desired result due to problems loading the schemas from w3.org, however the imported SAML schema is resolved successfully.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 28 '18 at 11:46









                Paul TurnerPaul Turner

                25.5k1180142




                25.5k1180142
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53504982%2fcompiling-an-xmlschemaset-with-imported-schemas%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

                    Calculate evaluation metrics using cross_val_predict sklearn

                    Insert data from modal to MySQL (multiple modal on website)