XSD/XML Schemas: resolving `Namespace ” is not available to be referenced in this schema` (via: StackOverflow)
Posted by jpluimers on 2013/09/01
While working on my Delphi: First try on an XSD for .groupproj files, I bumped into an error `Namespace ” is not available to be referenced in this schema`.
I added a targetNamespace attribute to the GroupProj.xsd so the .grouproj files would use the right namespace.
That resulted into two funny errors:
- Namespace ” is not available to be referenced in this schema.
Visual Studio (which I normally use for editing XSD) would only throw this error on these elements:
<xsd:element ...>
So it would not throw them on nodes using the empty namespace.
That was really confusing! - When validating .grouproj files using this GroupProj.xsd, I would get this error for all .groupproj files:
System.Xml.Schema.XmlSchemaValidationException: Type ‘<type>’ is not declared. (in this case for ‘<type>’ ‘ProjectType’).
That was odd too: the ‘ProjectType’ was indeed declared, and should be valid.
I could hardly find any information about the latter error, but the former gave a few useful hits.
Thanks User weston – Stack Overflow. for answering this: it made me smack to my head (like usual, a case of EBCAK).
To resolve Namespace ” is not available to be referenced in this schema. You can set the default ” namespace without the need to change the rest of the file:
So after adding the below default xmlns to the XSD, not only the first, but also the second error were gone!
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
This is the work in progress on GroupProj.xsd:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<!– This very small subset of "http://schemas.microsoft.com/developer/msbuild/2003". | |
Normally that namespace is defined in Microsoft.Build.xsd/Microsoft.Build.Core.xsd/Microsoft.Build.Commontypes.xsd. | |
Actually this subset is not a trimmed down version of the original, but started from scracth to | |
only contains types used by Delphi/RAD Studio/C++ Builder. | |
In the future, I might add some better restrictions here and there, but so far it is sufficient engough to | |
– validate .groupproj documents | |
– use the Delphi XML Data Binding Wizard to generate a Delphi unit that allows generation and reading of .groupproj files. | |
The default values for `minOccurs` and `maxOccurs` are 1, so make `maxOccurs` larger to allow `repeating` in the Delphi XML Data Binding Wizard. | |
–> | |
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" | |
targetNamespace="http://schemas.microsoft.com/developer/msbuild/2003" | |
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" | |
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | |
<xsd:element name="Project" type="ProjectType"/> | |
<xsd:complexType name="ProjectType"> | |
<xsd:sequence> | |
<xsd:element name="PropertyGroup" type="PropertyGroupType"/> | |
<!– Delphi XE2 sometimes has an empty `ItemGroup` element –> | |
<xsd:element name="ItemGroup" type="ItemGroupType" minOccurs="0" maxOccurs="unbounded"/> | |
<xsd:element name="ProjectExtensions" type="ProjectExtensionsType"/> | |
<xsd:element name="Target" type="TargetType" maxOccurs="unbounded"/> | |
<xsd:element name="Import" type="ImportType"/> | |
</xsd:sequence> | |
</xsd:complexType> | |
<xsd:complexType name="ImportType"> | |
<xsd:attribute name="Project" type="xsd:string"/> | |
<xsd:attribute name="Condition" type="xsd:string"/> | |
</xsd:complexType> | |
<xsd:complexType name="TargetType"> | |
<xsd:sequence> | |
<xsd:choice> | |
<xsd:element name="MSBuild" type="MSBuildType"/> | |
<xsd:element name="CallTarget" type="CallTargetType"/> | |
</xsd:choice> | |
</xsd:sequence> | |
<xsd:attribute name="DependsOnTargets" type="xsd:string" use="optional"/> | |
<xsd:attribute name="Name" type="xsd:string"/> | |
</xsd:complexType> | |
<xsd:complexType name="MSBuildType"> | |
<xsd:attribute name="Projects" type="xsd:string"/> | |
<!– http://www.infopathdev.com/blogs/greg/archive/2004/09/16/The-Difference-Between-Optional-and-Not-Required.aspx –> | |
<xsd:attribute name="Targets" type="xsd:string" use="optional"/> | |
</xsd:complexType> | |
<xsd:complexType name="CallTargetType"> | |
<xsd:attribute name="Targets" type="xsd:string"/> | |
</xsd:complexType> | |
<xsd:complexType name="ProjectExtensionsType"> | |
<xsd:sequence> | |
<xsd:element name="Borland.Personality" type="xsd:string"/> | |
<xsd:element name="Borland.ProjectType" type="xsd:string"/> | |
<xsd:element name="BorlandProject" type="BorlandProjectType"/> | |
</xsd:sequence> | |
</xsd:complexType> | |
<xsd:complexType name="BorlandProjectType"> | |
<xsd:choice> | |
<xsd:sequence> | |
<xsd:element name="Default.Personality" type="xsd:string"/> | |
</xsd:sequence> | |
<!– Delphi 2010 can have a nested `BorlandProject` element –> | |
<xsd:element name="BorlandProject" type="BorlandProjectType"/> | |
</xsd:choice> | |
</xsd:complexType> | |
<xsd:complexType name="ItemGroupType"> | |
<xsd:sequence> | |
<xsd:element name="Projects" type="ProjectsType" minOccurs="0" maxOccurs="unbounded"/> | |
</xsd:sequence> | |
</xsd:complexType> | |
<xsd:complexType name="ProjectsType"> | |
<xsd:sequence> | |
<xsd:element name="Dependencies" type="xsd:string"/> | |
</xsd:sequence> | |
<xsd:attribute name="Include" type="xsd:string"/> | |
</xsd:complexType> | |
<xsd:complexType name="PropertyGroupType"> | |
<xsd:sequence> | |
<xsd:element name="ProjectGuid" type="guid"/> | |
</xsd:sequence> | |
</xsd:complexType> | |
<xsd:simpleType name="guid"> | |
<xsd:annotation> | |
<xsd:documentation xml:lang="en"> | |
The representation of a GUID, generally the id of an element. | |
</xsd:documentation> | |
</xsd:annotation> | |
<xsd:restriction base="xsd:string"> | |
<xsd:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/> | |
</xsd:restriction> | |
</xsd:simpleType> | |
</xsd:schema> |
–jeroen
via: How do I use inheritance (ie xs:extension) in my own xml schema? – Stack Overflow.
uligerhardt said
s/through/throw/ please. :-)
jpluimers said
Thanks: fixed. I was pretty tired writing that (: