2017-09-22 6 views
1

私は外部からの着信XMLメッセージを処理しているため、自分では作成していません。私は彼らが有効なXML構文を使用していないと信じています。XML属性名に '!'記号は使用できますか?

は、次のXMLを考えてみましょう:

<?xml version="1.0"?> 
<MyItems> 
    <MyItem !myAttributeName=""/> 
    <!-- ^Note the '!'-mark at the beginning of 'myAttributeName'.--> 
</MyItems> 

私はXML属性の先頭に感嘆符が発生する驚いて。 これはまったく無効なXMLですか?または私はここに何かを逃していますか?基本的に、すべてのXMLパーサーと検証ツールはこの属性名を扱うことができませんが、私はまだこれが最初に使用されていることに驚いています。

答えて

2

これはまったく無効なXMLですか?

はい。

有効な名前は、このように構成されています

NameStartChar ::=   ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | 
          [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | 
          [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | 
          [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] 

NameChar  ::=   NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | 
          [#x203F-#x2040] 

Name   ::=   NameStartChar (NameChar)* 

!のでXML名の開始時に許可されていないだけでなく#x21あり、それはどちらか、1内のどこにでも許可されていません。 XMLの言葉では、あなたが持っているものはばかげたものです。

+0

妥当な回答(+1)だけでなく、[***よく形成されたXMLと有効なXML ***との間の差異](https://stackoverflow.com/a/25830482/290085) – kjhughes

+0

@kjhughesはい、この場合、それは整形式ではないため、有効でもありません(整形式でないものは有効ではありません)。何かこれが整形外れであるときは、私の用語で特に正確である必要がない限り、私はぎこちなし*を好む。上記の「有効な名前」では、XML固有のものではなく一般的な意味で* valid *を使用しています。 –

1

_または:と属性名で異なるすべての記号は、すべてのXML検証ツールの予期しないトークンです。

私はhereを見ることができるとして、XMLができます構文は次のとおりです。

Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 
| #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE] 

CombiningChar ::= [#x0300-#x0345] | [#x0360-#x0361] | [#x0483-#x0486] | [#x0591-#x05A1] | [#x05A3-#x05B9] | [#x05BB-#x05BD] | #x05BF | [#x05C1-#x05C2] | #x05C4 | [#x064B-#x0652] | #x0670 | [#x06D6-#x06DC] | [#x06DD-#x06DF] | [#x06E0-#x06E4] | [#x06E7-#x06E8] | [#x06EA-#x06ED] | [#x0901-#x0903] | #x093C | [#x093E-#x094C] | #x094D | [#x0951-#x0954] | [#x0962-#x0963] | [#x0981-#x0983] | #x09BC | #x09BE | #x09BF | [#x09C0-#x09C4] | [#x09C7-#x09C8] | [#x09CB-#x09CD] | #x09D7 | [#x09E2-#x09E3] | #x0A02 | #x0A3C | #x0A3E | #x0A3F | [#x0A40-#x0A42] | [#x0A47-#x0A48] | [#x0A4B-#x0A4D] | [#x0A70-#x0A71] | [#x0A81-#x0A83] | #x0ABC | [#x0ABE-#x0AC5] | [#x0AC7-#x0AC9] | [#x0ACB-#x0ACD] | [#x0B01-#x0B03] | #x0B3C | [#x0B3E-#x0B43] | [#x0B47-#x0B48] | [#x0B4B-#x0B4D] | [#x0B56-#x0B57] | [#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7 | [#x0C01-#x0C03] | [#x0C3E-#x0C44] | [#x0C46-#x0C48] | [#x0C4A-#x0C4D] | [#x0C55-#x0C56] | [#x0C82-#x0C83] | [#x0CBE-#x0CC4] | [#x0CC6-#x0CC8] | [#x0CCA-#x0CCD] | [#x0CD5-#x0CD6] | [#x0D02-#x0D03] | [#x0D3E-#x0D43] | [#x0D46-#x0D48] | [#x0D4A-#x0D4D] | #x0D57 | #x0E31 | [#x0E34-#x0E3A] | [#x0E47-#x0E4E] | #x0EB1 | [#x0EB4-#x0EB9] | [#x0EBB-#x0EBC] | [#x0EC8-#x0ECD] | [#x0F18-#x0F19] | #x0F35 | #x0F37 | #x0F39 | #x0F3E | #x0F3F | [#x0F71-#x0F84] | [#x0F86-#x0F8B] | [#x0F90-#x0F95] | #x0F97 | [#x0F99-#x0FAD] | [#x0FB1-#x0FB7] | #x0FB9 | [#x20D0-#x20DC] | #x20E1 | [#x302A-#x302F] | #x3099 | #x309A 

NameChar ::=  Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender 

Name ::=  (Letter | '_' | ':') (NameChar)* 

属性:: =名前式ATTVALUE

ATTVALUE :: = '"'([^ < & "] |リファレンス)* '' '' | ''([^ < & '] |"参照 "

これらはすべてXMLで許可されているEBNFです。そのため、名前に!シンボルの属性が整形式でない理由があります。

関連する問題