# Attribute “xmlns:dt” not allowed here.

> Canonical HTML version: https://rocketvalidator.com/html-validation/attribute-xmlns-dt-not-allowed-here
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

The `xmlns:dt` attribute — short for "XML Namespace: datatypes" — was historically used in Microsoft-specific XML vocabularies (notably `urn:schemas-microsoft-com:datatypes`) to declare data type information on elements. It was common in older ASP and IE-era markup. However, HTML5 is not an XML language, and it does not support arbitrary XML namespace declarations on elements.

In HTML5, the only `xmlns` attribute permitted is `xmlns="http://www.w3.org/1999/xhtml"` on the `<html>` element itself, and even that exists solely for compatibility with XHTML serialization. Namespace-prefixed attributes like `xmlns:dt`, `xmlns:o`, or `xmlns:v` are invalid. The HTML parser simply does not recognize them, and the W3C validator will flag them with the error **"Attribute 'xmlns:dt' not allowed here."**

## Why This Is a Problem

- **Standards compliance:** Using non-standard attributes means your document does not conform to the HTML specification, which can lead to unpredictable behavior across browsers.
- **Legacy lock-in:** The `xmlns:dt` attribute is tied to Microsoft's proprietary data type schema. Modern browsers do not interpret or use this namespace, so it serves no functional purpose in an HTML5 document.
- **Validation noise:** Invalid attributes generate validator errors that can obscure real issues in your markup, making it harder to catch genuine bugs.
- **Accessibility and tooling:** Screen readers, search engine crawlers, and other automated tools expect valid HTML. Non-standard attributes can confuse parsers or be silently discarded.

## How to Fix It

1. **Remove the attribute.** If `xmlns:dt` was carried over from legacy code or a CMS template and nothing in your application depends on it, simply delete it.
2. **Replace with `data-*` attributes.** If you need to attach custom metadata to an element — for example, to indicate a data type for use by JavaScript — use an HTML5 `data-*` attribute instead.
3. **Use XHTML if XML namespaces are required.** If you genuinely need XML namespace support (rare in modern web development), serve your document as `application/xhtml+xml` with a proper XHTML doctype and XML declaration. Be aware this changes parsing rules significantly.

## Examples

### Incorrect: Using `xmlns:dt` in HTML5

This will trigger the validation error:

```html
<ul xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <li dt:dt="string">Item one</li>
  <li dt:dt="number">42</li>
</ul>
```

Both `xmlns:dt` on the `<ul>` and the `dt:dt` attributes on the `<li>` elements are invalid in HTML5.

### Correct: Attribute removed

If the namespace declaration is unnecessary (which it almost always is in modern HTML), remove it along with any prefixed attributes:

```html
<ul>
  <li>Item one</li>
  <li>42</li>
</ul>
```

### Correct: Using `data-*` attributes for custom metadata

If your JavaScript or application logic needs to know the data type of each item, use valid `data-*` attributes:

```html
<ul>
  <li data-type="string">Item one</li>
  <li data-type="number">42</li>
</ul>
```

You can then access these values in JavaScript with `element.dataset.type`.

### Correct: Migrating a legacy `div` wrapper

A common legacy pattern places `xmlns:dt` on a container `div`:

```html
<!-- Invalid -->
<div xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <span dt:dt="dateTime">2024-01-15</span>
</div>
```

The fixed version removes the namespace and uses standard attributes:

```html
<div>
  <time datetime="2024-01-15">January 15, 2024</time>
</div>
```

In this case, the semantic `<time>` element with its `datetime` attribute is the proper HTML5 way to represent date and time values — no custom namespace needed.

## Quick Checklist

- Search your codebase for `xmlns:dt` and any `dt:` prefixed attributes.
- Check CMS templates, server-generated markup, and copy-pasted legacy code — these are the most common sources.
- Remove the attributes or replace them with `data-*` equivalents.
- Re-validate your document to confirm the error is resolved.
