diff --git a/xml/relaxng/src/org/intellij/html/RelaxedHtmlFromRngElementDescriptor.java b/xml/relaxng/src/org/intellij/html/RelaxedHtmlFromRngElementDescriptor.java
index e21db4785f8c..b287e6b50777 100644
--- a/xml/relaxng/src/org/intellij/html/RelaxedHtmlFromRngElementDescriptor.java
+++ b/xml/relaxng/src/org/intellij/html/RelaxedHtmlFromRngElementDescriptor.java
@@ -69,6 +69,9 @@ public class RelaxedHtmlFromRngElementDescriptor implements XmlElementDescriptor
@Override
public XmlAttributeDescriptor getAttributeDescriptor(XmlAttribute attribute) {
+ XmlAttributeDescriptor descriptor = myDelegate.getAttributeDescriptor(attribute);
+ if (descriptor != null) return descriptor;
+
return getAttributeDescriptor(attribute.getName(), attribute.getParent());
}
@@ -94,9 +97,7 @@ public class RelaxedHtmlFromRngElementDescriptor implements XmlElementDescriptor
@Override
public XmlAttributeDescriptor getAttributeDescriptor(String attributeName, final XmlTag context) {
- XmlAttributeDescriptor descriptor = myDelegate.getAttributeDescriptor(attributeName.toLowerCase(), context);
- // some elements in HTML5 schema (e.g. SVG) are case sensitive
- descriptor = descriptor == null ? myDelegate.getAttributeDescriptor(attributeName, context) : descriptor;
+ final XmlAttributeDescriptor descriptor = myDelegate.getAttributeDescriptor(attributeName.toLowerCase(), context);
if (descriptor != null) return descriptor;
return RelaxedHtmlFromSchemaElementDescriptor.getAttributeDescriptorFromFacelets(attributeName, context);
diff --git a/xml/xml-psi-impl/resources/standardSchemas/xlink.dtd b/xml/xml-psi-impl/resources/standardSchemas/xlink.dtd
new file mode 100644
index 000000000000..1a8f153e55db
--- /dev/null
+++ b/xml/xml-psi-impl/resources/standardSchemas/xlink.dtd
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xml/xml-psi-impl/src/com/intellij/javaee/InternalResourceProvider.java b/xml/xml-psi-impl/src/com/intellij/javaee/InternalResourceProvider.java
index 673540ef38e8..38777922ee35 100644
--- a/xml/xml-psi-impl/src/com/intellij/javaee/InternalResourceProvider.java
+++ b/xml/xml-psi-impl/src/com/intellij/javaee/InternalResourceProvider.java
@@ -63,5 +63,6 @@ public class InternalResourceProvider implements StandardResourceProvider{
// svg and mathML
impl.addIgnoredResource(HtmlUtil.MATH_ML_NAMESPACE);
impl.addIgnoredResource(HtmlUtil.SVG_NAMESPACE);
+ impl.addInternalResource("http://www.w3.org/1999/xlink", "xlink.dtd");
}
}
diff --git a/xml/xml-psi-impl/src/com/intellij/xml/HtmlXmlExtension.java b/xml/xml-psi-impl/src/com/intellij/xml/HtmlXmlExtension.java
index 4ece939ffac0..e54a93394242 100644
--- a/xml/xml-psi-impl/src/com/intellij/xml/HtmlXmlExtension.java
+++ b/xml/xml-psi-impl/src/com/intellij/xml/HtmlXmlExtension.java
@@ -3,6 +3,7 @@ package com.intellij.xml;
import com.intellij.ide.highlighter.HtmlFileType;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlDocument;
+import com.intellij.xml.util.HtmlUtil;
import org.jetbrains.annotations.Nullable;
/**
@@ -19,6 +20,16 @@ public class HtmlXmlExtension extends DefaultXmlExtension {
@Nullable
@Override
public String[][] getNamespacesFromDocument(XmlDocument parent, boolean declarationsExist) {
- return super.getNamespacesFromDocument(parent, false);
+ String[][] namespaces = super.getNamespacesFromDocument(parent, false);
+ if (namespaces == null || !HtmlUtil.isHtml5Document(parent)) return namespaces;
+
+ for (String[] namespace : namespaces) {
+ if ("xlink".equals(namespace[0])) return namespaces;
+ }
+
+ String[][] newNamespaces = new String[namespaces.length + 1][2];
+ System.arraycopy(namespaces, 0, newNamespaces, 0, namespaces.length);
+ newNamespaces[namespaces.length] = new String[] {"xlink", "http://www.w3.org/1999/xlink"};
+ return newNamespaces;
}
}