w3c / musicxml

MusicXML specification
508 stars 57 forks source link

musicxml.org gives 404 on the dtd #480

Open Jojo-Schmitz opened 1 year ago

Jojo-Schmitz commented 1 year ago

MuseScore's MusicXML files have this in their header: <!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 4.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd"> But musicxml.org gives an error 404 on that partwise.dtd (on anything else too). Initially reported in https://musescore.org/en/node/341860.

mscuthbert commented 1 year ago

This might sound ironic, but I believe that the URL in a DOCTYPE definition exists only for uniquely identifying a resource. It does not have to resolve to an actual address. That's always been an odd and confusing part of XML in some ways (though in the same boat, Recordare hasn't existed as an independent organization since MakeMusic bought the MusicXML rights and then later released them to W3C) but it's been a part of the specification for some time.

I will try to make it so that 4.1's preferred DOCTYPE resolves to a URL that actually exists, pointing to the .xsd definition in all cases.

And I will try to see if MakeMusic can get musicxml.org back up or if they're willing to transfer the domain name.

ahankinson commented 1 year ago

"http://www.musicxml.org/dtds/partwise.dtd" is a URL that points to the DTD, and it should resolve to a remote DTD for validation.

There is no formal MusicXML namespace URI, as this note suggests:

"The MusicXML 4.0 DTD has no namespace, so for compatibility the MusicXML 4.0 XSD has no namespace either. Those who need to import the MusicXML XSD into another schema are advised to create a new version that uses "http://www.musicxml.org/xsd/MusicXML" as the namespace."

Also, this GH issue.

Jojo-Schmitz commented 1 year ago

"http://www.musicxml.org/xsd/MusicXML" gives an error 404 too...

ahankinson commented 1 year ago

Yeah, that one doesn't have to resolve -- it's a namespace identifier; it uses assumptions about the uniqueness of domain names to construct a namespace that nobody else can control other than the originating org who owns the domain.

Basically, it looks like a URL but it isn't. It's just a globally unique string.