投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/3/11 17:30:58
> 名前空間のURIをいまいち理解できていません。
「XML 文書」において、
名前空間Ⓐの ABC 要素や XYZ 属性と
名前空間Ⓑの ABC 要素や XYZ 属性とは別物です。

名前空間が指定されていない文書の場合、
<ABC XYZ=""/> というデータが、Ⓐの情報かⒷの情報か区別できなくなります。


ただし、URI 自体に意味があるわけではありません。
それぞれのスキーマを一意に識別できる値になっていればそれで良いので、
="http://www.w3.org/2001/XMLSchema" でも 
="urn:isbn:978-4-88166-220-5" でも
="urn:uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" でも OK です。


> 名前空間で指定するURIは何でもいい&URIにスキーマなどのドキュメントはなくてもいい
> という説明を見ました。
はい、文法的には任意の URI を指定できます(URI は大文字小文字を区別します)。
ただし、何を指定しても良いというわけではありません。

それぞれのスキーマは、ターゲットとしている名前空間がセットで定義されており、
その名前空間と一致する XML 構造が求められます。なので、それに合わせた URI を
それぞれ指定する必要があるということです。

スキーマ定義は外部ファイルになっていることもあれば、
文書型宣言 !DOCTYPE として埋め込まれていることもありますし
解析処理する側(パーサー)にスキーマ情報が保持されていることもあります。


スキーマに合致している XML 文書は「妥当な XML (Valid XML)」と呼ばれますが、
そうでない XML 文書は Well Formed XML (整形式の XML 文書) 扱いです。
スキーマを処理しないパーサーの場合も、Well Formed XML として読み取られます。
もちろん、XML 文法にさえ合致していないものはエラー扱いですけれどね。(Invalid XML)


そして「WPF 文書」では、この XML のルールが XAML のルールへと拡張されています。
XAML の名前空間については下記をご覧ください。
https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/advanced/xaml-namespaces-and-namespace-mapping-for-wpf-xaml?WT.mc_id=DT-MVP-8907

XAML ファミリーのフレームワークとしては、WPF 以外にも
.NET MAUI や UWP 、古いものだと Xamarin や Silverlight などがあります。


> x:Class="LoginWindow"
> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

> ここで例えば
> x:ABC="abc"
> と書くと
> 「プロパティ"ABC"は"http://schemas.microsoft.com/winfx/2006/xaml"名前空間に存在しません。」
> という警告が出てきます。
警告メッセージの通りですよ。
そこで指定した既知の名前空間には、"ABC" という名前のプロパティが定義されていない、ということです。


標準では、"http://schemas.microsoft.com/winfx/2006/xaml" という XML名前空間に対して
x という NCName が別名として付与されている状態ですが、別名は x 以外であっても構いませんし、
同じ名前空間に対して複数の別名を持たせても良いですし、
同じ別名に対して、子要素が親要素とは異なる名前空間を上書きして割り当てても構いません。

すなわち、下記はいずれも適切な WPF 文書です。

<Window さんぷる:Class="MainWindow"
  xmlns:さんぷる="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  Title="Example"
/>


<VisualBasic:Window 中学校:Class="MainWindow"
  xmlns:VisualBasic="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:中学校="http://schemas.microsoft.com/winfx/2006/xaml"
/>


<x:Window
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:y="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:z="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    x:Title="主窓"
    y:Class="MainWindow"
    Width="320"
    z:Height="320">
    <y:Grid xmlns:y="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    </y:Grid>
</x:Window>



> 警告が出ていないところを見るとClassはxのプロパティとして存在しているのだとは思うのですが、
ルート要素にある Page や Window などは、WPF XAML の名前空間のものですが、
x:Class は WPF ではなく、XAML の名前空間に属するメンバーです。
まぁ、本来は x というよりも、"http://schemas.microsoft.com/winfx/2006/xaml" のものなわけですが。


> 何が存在していて何が存在していないのかというのはどこでわかるのでしょうか?
x:Class ディレクティブに関しての情報は、一応このあたり。
https://learn.microsoft.com/ja-jp/dotnet/desktop/xaml-services/xclass-directive?WT.mc_id=DT-MVP-8907

もう少し統括的な資料が必要なら、下記からダウンロードできます。
https://www.microsoft.com/en-us/download/details.aspx?id=19600&44F86079-8679-400C-BFF2-9CA5F2BCBDFC=1
上記のうち、たとえば x:Class ディレクティブに関してであれば、
[MS-XAML]だと、セクション 4.3.1.6 や 5.3.7 、
[MS-XAML-2009,2012,2017] だと、セクション  6.3.1.6 や 7.3.7 あたり。

PDF ではなく Web ベースだとこのあたりですかね。
https://github.com/microsoft/xaml-standard
https://learn.microsoft.com/ja-jp/dotnet/desktop/xaml-services/?WT.mc_id=DT-MVP-8907
https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/advanced/xaml-in-wpf?WT.mc_id=DT-MVP-8907&view=netframeworkdesktop-4.8
https://learn.microsoft.com/ja-jp/dotnet/desktop/wpf/advanced/wpf-xaml-namescopes?WT.mc_id=DT-MVP-8907


和書だと、 ISBN:978-4797339161 あたりとか。(ちょっと古いか?)

リファレンスとしてではなく、入門的な情報というところなら、このあたりとか。
https://kisuke0303.sakura.ne.jp/blog/?p=340



ちなみに(XAML ではなく)XML エディタ向けの静的なスキーマの幾つかは、 Xml\Schemas\ フォルダーにあります。