「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>その他、開発の色々]] * 目次 [#tfa414bc] #contents *概要 [#a90690ed] XML(Extensible Markup Language)、JISによる訳語「拡張可能なマーク付け言語」とは、 -基本的な構文規則を共通とすることで、~ 任意の用途向けの言語に拡張することを容易としたことが特徴のマークアップ言語の総称。 -SGMLからの移行を目的としてSGMLのサブセットに定められ開発された。 --文法はSGMLの構文解析器と互換性を保つようにシンプルに --機能はSGMLに無いものが追加されている。 -仕様は、World Wide Web Consortium (W3C) により策定・勧告。 --1998年2月に XML 1.0 が勧告された。 --2010年4月現在、XML 1.0 と XML 1.1 の2つのバージョンが勧告されている。 *詳細 [#l1ef94e1] **XML宣言 [#kde9837b] -XML文書の先頭に付き、その文書がXML文書であることを明確に示す文字列。 -XML宣言の例 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> --versio=~ 内容は常に1.0。またXML宣言中で省略はできない。 --encoding~ XML文書がどのような文字コードで記述されているかを明示する。 --standalone~ XML文書が、[[スタンドアロン文書>#se2a5b3d]]かどうかを、yesまたはnoで記述する。 **検索方法 [#xd85f11c] ***DOM [#ted02de2] -Document Object Model (DOM) -XML文書を各種プログラムから利用するための仕組み。 ***XPath [#m00ef5b1] ロケーションパスによりXMLに準拠した文書の特定の部分を指定する言語構文 ***XSLT [#d63053d9] -XSL Transformations(XSL変換) -XSLTはXML形式の文書を変換する。 --[[XPath>#m00ef5b1]]による選択と検索にもとづき、 --XML文書全体または文書の一部に対して変換を行い、 --出力できる。 ---XML形式 ---XML(整形式)ではないその他任意のテキスト形式 **スキーマ [#oc100ef8] XML用のスキーマ言語には、 -[[DTD>#a07fb825]] -[[XML Schema>#k1feabf0]] -RELAX -XML Data Reduced などがある。 ***整形式の / 妥当なXML文書 [#hecd0a4d] -整形式のXML文書 --表面的な形式だけが整えられたXML文書 --「形式が整えられている」が「整形された式」ではない --具体的に言うと、DTDに関する情報を記述しないもの -妥当なXML文書~ DTDを明示して構文の検証を行うXML文書 ***名前空間 [#q6382daf] -名前空間はURIとして記述する。 --URLとして記述する方式。~ xmlns="http://www.w3.org/2001/XMLSchema" --URNとして記述する方式。~ xmlns="urn:schemas-microsoft-com:office:spreadsheet" -名前空間の使用方法 --要素に前述のxmlns属性を記述し、~ 適用される名前空間を指定できる。 --なお、要素名に指定した場合 ---子要素に伝播する。 ---が、属性には伝播しない。 -名前空間の接頭辞 --概要 ---しかし、上記では長すぎるので、以下の様に短縮系の接頭辞を定義できる。 xmlns:接頭辞="名前空間" ---これを「接頭辞:要素名や属性名」のようにして要素や属性の名前空間を指定できる。 ---この場合、接頭辞を使用することで属性にも名前空間を明記し易い。 --例 ---xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ---xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ***DTD [#a07fb825] -Document Type Definition(文書型定義、DTD) -XMLにおいて、文書構造(文書型)を定義するためのスキーマ言語 -問題点~ もともとSGMLは文書処理を目的とした言語 --DTDは独自の構文を持っていて、~ XMLの要素や属性とは別の記述方法が必要。 --データ型の種類が極めて少ない。 --名前空間に対応する機能を持っていない。 --ある名前の要素が内容モデルを1つしか持てない。 ***XML Schema [#k1feabf0] -DTDの後継 --XML Schema自体がXMLにより記述される仕様となっている --データ型やXML名前空間の定義が扱える -問題点~ 複数の業界有力企業が仕様の策定に参加して、~ 各社の思惑が絡み合い、あまりに多くの機能を取り込んだ為、~ 標準化は難航し、複雑な仕様となってしまっている。 **スタンドアロン文書(非依存文書) [#se2a5b3d] 外部のファイルを参照を処理しなくても、~ すべて正しい文書が得られるXML文書を示す。 *クラスライブラリ [#ue592e83] **.NET [#tc841441] ***XmlReader / XmlWriter [#n7646c93] Xmlをストリーム(StreamReader、StreamWriter)で~ シーケンシャルに読み書きする抽象クラス -XmlWriter --XmlTextWriter(具象クラス)~ StringWriterなどから、XmlTextWriterを生成して、~ 要素属性をシーケンシャルに書込んでいく。 -XmlReader --XmlTextReader(具象クラス)~ StringReaderなどから、XmlTextReaderを生成して、~ 要素属性をシーケンシャルに読込んでいく。 --XmlValidatingReader(具象クラス) ---互換性のために残されているメンバー(obsoleted) ---[[スキーマ>#oc100ef8]]検証機能が追加されている。 ---たとえは、実体参照を解決しながら進むことが出来る。 --XmlReaderSettings~ XmlValidatingReaderは古く、新しいバージョンでは、~ XmlReader.Createの引数にXmlReaderSettingsを指定~ することで検証機能付きの読込処理を実装できる模様。 --OASISのXML適合テストにパス~ 次の例外を除いて既定(デフォルト)の設定にする必要がある。 ---XmlTextReader.Normalization = true(既定値はfalse)。 ---XmlValidatingReader.ValidationCallbackハンドラ(既定では例外をスローする)。 ---XmlValidatingReader.ValidationType = ValidationType.DTD(既定はValidationType Auto) ***XmlDocument [#d00b00d9] [[DOM>#ted02de2]]による読み書きを行うクラスライブラリ -読み書き --読み書きが可能。 --読み書きに加えて、更新も可能。 -検索機能として、以下を使用可能。 --[[DOM>#ted02de2]] ---GetElementById ---GetElementsByTagName --[[XPath>#m00ef5b1]] ---SelectNodes ---SelectSingleNode ※ DTDのATTLISTでid属性がID型であることを~ 明示しないとgetElementByIdが使えないなどの問題がある。 ***XPathDocument [#ibc9091a] [[XPath>#m00ef5b1]]データ モデルを使用し、~ XMLの読み取り専用で高速なインメモリ表現を提供。 ***XmlReaderSettings [#m4dab3f5] 前述の[[XmlReaderSettings>#n7646c93]]を使用して、~ XML Schemaによる検証を実装可能。 -参考 --XSD による XML の検証 - C# 入門~ https://csharp.keicode.com/topics/xml-xsd-validation.php --xsd (XML Schema Definition Language)によって、~ XMLを検証する(Validate) - tekkの日記 C#,VB.NET~ http://d.hatena.ne.jp/tekk/20090718/1247930166 --@IT ---連載:.NETで簡単XML 第8回 VS.NETでXML Schemaを活用する(動作編)(1/4)~ https://www.atmarkit.co.jp/fdotnet/easyxml/easyxml08/easyxml08_01.html ---「プロジェクト内のスキーマを使用したXMLの検証について」(1) Insider.NET~ https://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43530&forum=7 ***SignedXml / EncryptedXml [#f588cc7d] -署名~ SignedXmlを使用する。 --参考(Microsoft Docs ---How to: Sign XML Documents with Digital Signatures~ https://docs.microsoft.com/ja-jp/dotnet/standard/security/how-to-sign-xml-documents-with-digital-signatures ---SignedXml Class (System.Security.Cryptography.Xml)~ https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.xml.signedxml -暗号化~ EncryptedXmlを使用する。 --参考(Microsoft Docs ---EncryptedXml Class (System.Security.Cryptography.Xml)~ https://docs.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.xml.encryptedxml **VBA [#u6c2d7d2] MSXML2.DOMDocument、MSXML2.DOMDocument60 と言う[[COM]]を使用する。 *関連情報 [#h4a8977e] **[[WebAPI]] [#z525a46b] ***方式 [#xc0c3582] -[[REST]] -[[RPC]] - [[XML-RPC>RPC#fdad3f1c]] ***作成方法 [#d81d3b60] -[[ASP.NET Web Service]](SOAP Web サービス) **[[SAML]] [#n252b43b] *参考 [#dd0d53fd] -Extensible Markup Language - Wikipedia~ https://ja.wikipedia.org/wiki/Extensible_Markup_Language -XML ドキュメントと XML データ | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/standard/data/xml/ **www.w3.org [#q1802873] -Extensible Markup Language (XML)~ https://www.w3.org/XML/ -Extensible Markup Language (XML) 1.0 (第五版)~ http://w4ard.eplusx.net/translation/W3C/REC-xml-20081126/ -XMLSig~ XML署名の構文と処理~ http://www.w3.org/TR/xmldsig-core/ -XMLEnc~ XML暗号化の構文と処理~ http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/ **@IT [#a954efd1] -連載:.NETで簡単XML~ http://www.atmarkit.co.jp/fdotnet/easyxml/index/index.html --第1回 XML超入門 ---1.プログラマーにとって重要度を増すXML ---2.簡単なXML文書 ---3.ネストする要素、属性、空要素、コメント、XML宣言 ---4.XMLにおける名前空間 --第2回 プログラムでXML文書を作成する ---1.XML文書をプログラムから読み書きする方法 ---2.XmlTextWriterクラスを使用したサンプル(1) ---3.XmlTextWriterクラスを使用したサンプル(2) --第3回 XML文書を読み書きするプログラムの作成 ---1.XML文書を読み込む ---2.XML文書を読み込むサンプル・プログラム ---3.文書の妥当性を検証するXmlValidatingReaderクラス ---4.XML文書を読み書きするサンプル ---5.XML文書を読み書きするサンプルの解説 --第4回 DOM(Document Object Model) ---1.DOM(Document Object Model)とは何か? ---2.DOMを用いてXML文書を作成するプログラム ---3.DOMを用いてXML文書を読み込むプログラム ---4.XML文書内のデータを書き換える --第5回 DOMとXPath ---1.DOMの死角 ---2.XPathによるノード選択例とXPathの歴史 ---3.名前空間の指定方法/文書のノード以外のノードから使う ---4.指定番目、属性値によるノード選択 --第6回 .NETプログラムでXSLTスクリプトを使う ---1.XSLTとは何か ---2.XSLTミニ入門その1 要素に対応する出力 ---3.XSLTミニ入門その2、3 属性に対応する出力/XPath式の値を出力 ---4.プログラムでXSLTを処理/プログラム内のデータを変換 ---5.XPathDocumentで処理を高速化/XSLTにプログラムを埋め込む --第7回 VS.NETでXML Schemaを活用する(作成編) ---1.XML Schemaとは何か ---2.Visual Studio .NETでスキーマを作成する(1) ---3.Visual Studio .NETでスキーマを作成する(2) ---4.Visual Studio .NETでスキーマを作成する(3) --第8回 VS.NETでXML Schemaを活用する(動作編) ---1.XML文書読み込み時にXML Schemaで内容をチェックする ---2.スキーマからデータセットを作成する(1) ---3.スキーマからデータセットを作成する(2) ---4.データセットを作成できない場合 --第9回 オブジェクトをXMLでシリアライズ(1) ---1.シリアライズによるオブジェクトの永続化 ---2.シリアライズ/デシリアライズを行う例 ---3..XmlIgnoreAttribute属性を使用したシリアル化の防止 --第10回 オブジェクトをXMLでシリアライズ(2) ---1.要素名を指定してシリアライズする ---2.属性の指定/参照されるオブジェクトのシリアル化 ---3.名前空間の指定/配列のシリアル化 --第11回 オブジェクトをXMLでシリアライズ(3) ---1.派生クラスを含む配列のシリアライズ ---2.派生クラスを含む配列をシリアライズするプログラムの内容 ---3.要素のシーケンスとしての配列のシリアライズ ---4.ArrayListオブジェクトのシリアライズ ---5.自作コレクションのシリアライズ --第12回 オブジェクトをXMLでシリアライズ(4) ---1.xsd.exeによるスキーマの自動生成 ---2.スキーマからソースの生成 ---3.XmlRoot属性やXmlType属性とスキーマの関係 --第13回 オブジェクトをXMLでシリアライズ(5) ---1.SoapFormatterを使ったシリアライズ ---2.シリアライズさせないフィールド ---3.SoapFormatterの姉妹クラス、BinaryFormatterクラス --第14回 オブジェクトをXMLでシリアライズ(6) ---1.ISerializableインターフェイスを用いたシリアライズ制御 ---2.ISerializableインターフェイスを使ったクラスの継承 ---3.XML Webサービス経由で使われるシリアライズの種類 ---4.XmlSerializerを使ってSOAP形式でシリアライズする方法 --第15回 川俣流XMLプログラミングの定石(1) ---1.XMLプログラミングにおける定石の必要性 ---2.XMLファイル書き込み時の問題点 ---3.安全なXMLファイル書き込みのための定石 ---4.XML文書の読み書きにどの方法を使うか ---5.シリアライズを使った読み書きの問題点 --第16回 川俣流XMLプログラミングの定石(2) ---1.データを処理しやすい形に変換するタイミング ---2.DOMツリーからデータを抜き取る方法 ---3.XML文書とクラスの1対1対応およびXML文書のキャッシュ ---4.文字列定数にXML文書を書き込む場合の改行とインデント -XMLカレッジ-総合インデックス > 連載:XMLマスターへの道~ https://www.atmarkit.co.jp/fxml/indexes/index_col.html#xe11 --(1)XMLマスター:ベーシック試験のレベルは? --(2)XMLの概要と起源、関連規格 --(3)XML文書の要素、エンコーディング、宣言 --(4)すべてのXM文書は整形式である --(5)valid XMLとDTDの関係 --(6)模擬問題:XMLの基本 --(7)模擬問題:W3C XML Schema --(8)模擬問題:DOM --(9)DTDの実体宣言と記法宣言 --(10)XSLTの基本構造を理解する --(11)XSLTで必須の制御命令を覚える --(12)XPathによるノードの指定法を理解する --(13)名前空間を理解しDOMの概要をつかむ --(14)XML Schemaを利用したスキーマ定義 --(最終回)XML Schema―型の再利用と名前空間 -XML用語事典インデックス~ https://www.atmarkit.co.jp/fxml/dictionary/indexpage/xmlindex.html ---- Tags: [[:IT国際標準]], [[:プログラミング]], [[:通信技術]], [[:.NET開発]], [[:.NET Core]], [[:ASP.NET]], [[:ASP.NET Web API]]