У меня есть файл схемы XSD, который выдает следующую ошибку компиляции:
System.Xml.Schema.XmlSchemaException: 'Wildcard '##targetNamespace' allows
element 'http://mycompany.com/datamodel/tasks:OwnerID', and causes the
content model to become ambiguous. A content model must be formed such that
during validation of an element information item sequence, the particle
contained directly, indirectly or implicitly therein with which to attempt
to validate each item in the sequence in turn can be uniquely determined
without examining the content or attributes of that item, and without any
information about the items in the remainder of the sequence.'
Вот XSD и код для его компиляции:
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace TestXmlSchemaCompilation
{
class Program
{
static void Main(string[] args)
{
var schemaText = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<schema xmlns=""http://www.w3.org/2001/XMLSchema"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:tasks=""http://mycompany.com/datamodel/tasks"" targetNamespace=""http://mycompany.com/datamodel/tasks"" elementFormDefault=""qualified"">
<element name=""TaskInformation"" type=""tasks:TaskInformation"" />
<complexType name=""TaskInformation"" >
<sequence >
<element name=""OwnerID"" type=""xsd:string"" minOccurs=""0"" maxOccurs=""unbounded"" />
<element name=""TaskID"" type=""xsd:string"" minOccurs=""0"" />
<element name=""ContentType"" type=""xsd:string"" minOccurs=""0"" maxOccurs=""unbounded"" />
<any namespace=""##targetNamespace"" minOccurs=""0"" maxOccurs=""unbounded"" />
</sequence>
</complexType>
<element name=""TaskData"" type=""tasks:TaskData"" />
<complexType name=""TaskData"" >
<sequence >
<element name=""Id"" type=""xsd:string"" minOccurs=""0"" />
<element name=""Name"" type=""xsd:string"" minOccurs=""0"" />
<element name=""Type"" type=""xsd:string"" minOccurs=""0"" />
<element name=""Value"" type=""xsd:string"" minOccurs=""0"" />
<any namespace=""##targetNamespace"" minOccurs=""0"" maxOccurs=""unbounded"" />
</sequence>
</complexType>
</schema>";
using (var stringReader = new StringReader(schemaText))
using (var xmlReader = XmlReader.Create(stringReader))
{
var xmlSchemaSet = new XmlSchemaSet();
xmlSchemaSet.Add(XmlSchema.Read(xmlReader, null));
xmlSchemaSet.Compile();
}
}
}
}
Есть ли способ изменить документ XSD, чтобы избежать этой ошибки, но сохранить первоначальное значение схемы? Я видел подобные вопросы, и если я правильно понимаю, парсер не знает, должен ли обнаруженный элемент проверяться на соответствие «любому» правилу или элементу, указанному явно. Я думаю, что такая ошибка не возникает для XSD 1.1, но более новая версия не поддерживается .NET. Есть ли какие-нибудь инструкции, которые я мог бы использовать, чтобы обойти это?