
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
43 lines
1.0 KiB
Plaintext
43 lines
1.0 KiB
Plaintext
== Why is this an issue?
|
|
|
|
``++ID++`` and ``++IDREF++`` are constructs inherited from DTDs, and they suffer from painful drawbacks, mainly:
|
|
|
|
* ``++ID++``s are too widely scoped: an ``++ID++`` must be unique in the XML document. This means that if an XML document contains ``++<Person>++`` elements and ``++<Dog>++`` elements, both with a "name" attribute of ``++type="xs:ID"++``, then two people can't have the same name. Neither can two dogs, or a person and a dog.
|
|
* IDs must comply with tight naming scheme. For example, "123" is not a valid value for an ID.
|
|
|
|
Instead, ``++KEY++`` and ``++KEYREF++`` should be used. And if you really need to insure uniqueness, use ``++xs:unique++`` to add a uniqueness constraint.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,xml]
|
|
----
|
|
ToDo
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,xml]
|
|
----
|
|
ToDo
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Use "(KEY|KEYREF)" instead.
|
|
|
|
|
|
=== Highlighting
|
|
|
|
``++ID=++``|``++IDREF=++``
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|