認識XML(簡單瞭解)
XML筆記
2020、5、31
初識
- XML 指可擴充套件標記語言(eXtensible Markup Language)。
- XML 被設計用來傳輸和儲存資料。
- 什麼是XML
- XML 指可擴充套件標記語言(EXtensible Markup Language)。
- XML 是一種很像HTML的標記語言。
- XML 的設計宗旨是傳輸資料,而不是顯示資料。
- XML 標籤沒有被預定義。您需要自行定義標籤。
- XML 被設計為具有自我描述性。
- XML 是 W3C 的推薦標準。
- XML與HTML
- XML 被設計用來傳輸和儲存資料,其焦點是資料的內容。
- HTML 被設計用來顯示資料,其焦點是資料的外觀。
- XML用途
- XML 應用於 Web 開發的許多方面,常用於簡化資料的儲存和共享。
- 把資料從HTML中分離
- 簡化資料共享
- 簡化資料傳輸
- 簡化平臺變更
- 建立新的網際網路語言
- XHTML
- 用於描述可用的 Web 服務 的 WSDL
- 作為手持裝置的標記語言的 WAP 和 WML
- 用於新聞 feed 的 RSS 語言
- 描述資本和本體的 RDF 和 OWL
- 用於描述針針對 Web 的多媒體 的 SMIL
- 通常XML被用於資訊的記錄和傳遞,因此經常被用於充當配置檔案
XML樹結構
- XML 文件形成了一種樹結構,它從"根部"開始,然後擴充套件到"枝葉"。
- 示例
<?xml version="1.0" encoding="UTF-8"?>
頭部宣告xml的版本和編碼資訊
<note> 描述文件的根元素
<to>Tove</to> 描述根的四個子元素
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note> 定義根元素結尾
- 第一行是 XML 宣告。它定義 XML 的版本(1.0)和所使用的編碼(UTF-8 : 萬國碼, 可顯示各種語言)。
- XML 文件必須包含根元素(也就是沒有兄弟元素的標籤)。該元素是所有其他元素的父元素
- 示例2
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
XML語法規則
- XML 必須包含根元素,它是所有其他元素的父元素
- XML 宣告檔案的可選部分,如果存在需要放在文件的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
-
所有XML元素必須包含結束標籤
- 註釋:從上面的例項中,您也許已經注意到 XML 宣告沒有關閉標籤。這不是錯誤。宣告不是 XML 文件本身的一部分,它沒有關閉標籤。
-
XML嚴格區分大小寫
-
XML屬性值必須加引號
-
註釋同HTML
-
實體引用
-
如果把字元 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。為了避免這個錯誤,請用實體引用來代替 "<" 字元
<message>if salary < 1000 then</message>
<message>if salary < 1000 then</message>
-
在 XML 中,有 5 個預定義的實體引用:
< < less than > > greater than & & ampersand ' ' apostrophe " " quotation mark -
註釋:在 XML 中,只有字元 "<" 和 "&" 確實是非法的。大於號是合法的,但是用實體引用來代替它是一個好習慣。
-
-
註釋語法
<!-- This is a comment -->
-
XML會保留空格
XML元素
- XML 元素指的是從(且包括)開始標籤直到(且包括)結束標籤的部分。
- 一個元素可以包含:
- 其他元素
- 文字
- 屬性
- 或混合以上所有..
- 元素命名規則
- 名稱可以包含字母、數字以及其他的字元
- 名稱不能以數字或者標點符號開始
- 名稱不能以字母 xml(或者 XML、Xml 等等)開始
- 名稱不能包含空格
- XML 的優勢之一,就是可以在不中斷應用程式的情況下進行擴充套件。
XML屬性
- 屬性(Attribute)提供有關元素的額外資訊。
- 示例
<file type="gif">computer.gif</file>
- 屬性通常提供不屬於資料組成部分的資訊。在下面的例項中,檔案型別與資料無關,但是對需要處理這個元素的軟體來說卻很重要
- 屬性值必須被引號包圍,不過單引號和雙引號均可使用
- 如果屬性值本身包含雙引號,可以使用單引號,或者可以使用字元實體
- 沒有什麼規矩可以告訴我們什麼時候該使用屬性,而什麼時候該使用元素。我的經驗是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應該儘量避免使用屬性。如果資訊感覺起來很像資料,那麼請使用元素吧。
- 屬性不能包含多個值(元素可以)
- 屬性不能包含樹結構(元素可以)
- 屬性不容易擴充套件(為未來的變化)
- 有時候會向元素分配 ID 引用。這些 ID 索引可用於標識 XML 元素,它起作用的方式與 HTML 中 id 屬性是一樣的
- 元資料(有關資料的資料)應當儲存為屬性,而資料本身應當儲存為元素。
XML驗證
- 通過 DTD 驗證的XML是"合法"的 XML。
- 形式良好的XML
- XML 文件必須有一個根元素
- XML元素都必須有一個關閉標籤
- XML 標籤對大小寫敏感
- XML 元素必須被正確的巢狀
- XML 屬性值必須加引號
- XML錯誤會終止程式
- XML 文件中的錯誤會終止您的 XML 應用程式。
- W3C 的 XML 規範宣告:如果 XML 文件存在錯誤,那麼程式就不應當繼續處理這個文件。理由是,XML 軟體應當輕巧,快速,具有良好的相容性。
- 如果使用 HTML,建立包含大量錯誤的文件是有可能的(比如您忘記了結束標籤)。其中一個主要的原因是 HTML 瀏覽器相當臃腫,相容性也很差,並且它們有自己的方式來確定當發現錯誤時文件應該顯示為什麼樣子。
XML檢視
-
在所有主流的瀏覽器中,均能夠檢視原始的 XML 檔案。
-
XML 文件將顯示為程式碼顏色化的根以及子元素。通過點選元素左側的加號(+)或減號( - ),可以展開或收起元素的結構。要檢視原始的 XML 源(不包括 + 和 - 符號),選擇"檢視頁面原始碼"或從瀏覽器選單"檢視原始檔"。
-
註釋:在 Safari 中,只有元素的文字將被顯示。要檢視原始的 XML,您必須右鍵單擊頁面,選擇"檢視原始檔"。
-
如果一個錯誤的XML檔案被開啟,瀏覽器會報告錯誤。
XML CSS
- 通過使用 CSS(Cascading Style Sheets 層疊樣式表),您可以新增顯示資訊到 XML 文件中。
- 使用
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
連結外部XMLcss檔案 - 使用 CSS 格式化 XML 不是常用的方法。
- W3C 推薦使用 XSLT
XML XSLT
- 通過使用 XSLT,您可以把 XML 文件轉換成 HTML 格式。
- XSLT 是首選的 XML 樣式表語言。
- XSLT(eXtensible Stylesheet Language Transformations)遠比 CSS 更加完善
- XSLT 是在瀏覽器顯示 XML 檔案之前,先把它轉換為 HTML
XMLHttpRequest物件
- XMLHttpRequest 物件用於在後臺與伺服器交換資料
- 在不重新載入頁面的情況下更新網頁
- 在頁面已載入後從伺服器請求資料
- 在頁面已載入後從伺服器接收資料
- 在後臺向伺服器傳送資料
XML解析器
- 所有現代瀏覽器都有內建的 XML 解析器。
- XML 解析器把 XML 文件轉換為 XML DOM 物件 - 可通過 JavaScript 操作的物件。
- 出於安全方面的原因,現代的瀏覽器不允許跨域的訪問
- 這意味著,網頁以及它試圖載入的 XML 檔案,都必須位於相同的伺服器上。
DTD
初識
- Document Type Definition (文件型別定義)
- 用於約束XML的文件格式,保證XML是一個有效的XML
- 內部DTD(包含在XML文件中),外部DTD(外部單獨的一個檔案)
使用
-
可以分為兩種(內部DTD,外部DTD)
-
內部DTD
-
假如 DTD 被包含在您的 XML 原始檔中,它應當通過下面的語法包裝在一個 DOCTYPE 宣告中
<!DOCTYPE root-element(根元素) [element-declarations](元素宣告)>
-
元素宣告
<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend</body> </note>
- !DOCTYPE note (第二行)定義此文件是 note 型別的文件。
- !ELEMENT note (第三行)定義 note 元素有四個元素:"to、from、heading,、body"
- !ELEMENT to (第四行)定義 to 元素為 "#PCDATA" 型別
- !ELEMENT from (第五行)定義 from 元素為 "#PCDATA" 型別
- !ELEMENT heading (第六行)定義 heading 元素為 "#PCDATA" 型別
- !ELEMENT body (第七行)定義 body 元素為 "#PCDATA" 型別
-
數量詞
- +:表示元素出現一次或者多次,至少為一次
- ?:表示元素出現一次或者零次
- *:表示出現任意次
-
-
外部DTD
-
外部的DTD檔案是以dtd為字尾名的檔案,內部只需要寫上xml頭部宣告在後面直接寫宣告欄位即可
-
假如 DTD 位於 XML 原始檔的外部,那麼它應通過下面的語法被封裝在一個 DOCTYPE 定義中
<!DOCTYPE root-element SYSTEM "filename">
-
示例
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
-
構建模組
- XML 和 HTML文件的主要的構建模組是元素標籤。
- 所有的 XML 文件(以及 HTML 文件)均由以下簡單的構建模組構成:
- 元素
- 元素是 XML 以及 HTML 文件的主要構建模組。
- HTML 元素的例子是 "body" 和 "table"。XML 元素的例子是 "note" 和 "message" 。元素可包含文字、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。
- 屬性
- 屬性可提供有關元素的額外資訊。
- 屬性總是被置於某元素的開始標籤中。屬性總是以名稱/值的形式成對出現的。
- 實體
- 實體是用來定義普通文字的變數。實體引用是對實體的引用。
- PCDATA
- PCDATA 的意思是被解析的字元資料(parsed character data)。
- 可把字元資料想象為 XML 元素的開始標籤與結束標籤之間的文字。
- PCDATA 是會被解析器解析的文字。這些文字將被解析器檢查實體以及標記。
- 文字中的標籤會被當作標記來處理,而實體會被展開。
- 不過,被解析的字元資料不應當包含任何 &、< 或者 > 字元;需要使用 &、< 以及 > 實體來分別替換它們。
- CDATA
- CDATA 的意思是字元資料(character data)。
- CDATA 是不會被解析器解析的文字。在這些文字中的標籤不會被當作標記來對待,其中的實體也不會被展開。
- 元素
宣告元素
-
在一個 DTD 中,元素通過元素宣告來進行宣告。
-
示例
<!ELEMENT element-name category> 或 <!ELEMENT element-name (element-content)>
-
空元素通過類別關鍵詞EMPTY進行宣告:
<!ELEMENT element-name EMPTY> 例項: <!ELEMENT br EMPTY> XML example: <br />
-
只有 PCDATA 的元素通過圓括號中的 #PCDATA 進行宣告:
<!ELEMENT element-name (#PCDATA)> 例項: <!ELEMENT from (#PCDATA)>
-
通過類別關鍵詞 ANY 宣告的元素,可包含任何可解析資料的組合:
<!ELEMENT element-name ANY> 例項: <!ELEMENT note ANY>
-
帶有一個或多個子元素的元素通過圓括號中的子元素名進行宣告:
<!ELEMENT element-name (child1)> 或 <!ELEMENT element-name (child1,child2,...)> 例項: <!ELEMENT note (to,from,heading,body)>
- 當子元素按照由逗號分隔開的序列進行宣告時,這些子元素必須按照相同的順序出現在文件中
-
宣告必須出現一次的元素
<!ELEMENT element-name (child-name)> 例項: <!ELEMENT note (message)>
-
宣告"非.../即..."型別的內容
例項: <!ELEMENT note (to,from,header,(message|body))> 上面的例子聲明瞭:"note" 元素必須包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素即 "body" 元素。
-
宣告混合內容
例項: <!ELEMENT note (#PCDATA|to|from|header|message)*> 上面的例子聲明瞭:"note" 元素可包含出現零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
宣告屬性
-
在 DTD 中,屬性通過 ATTLIST 宣告來進行宣告。
<!ATTLIST element-name attribute-name attribute-type attribute-value> DTD 例項: <!ATTLIST payment type CDATA "check"> XML 例項: <payment type="check" />
-
屬性型別
型別 描述 CDATA 值為字元資料 (character data) (en1|en2|..) 此值是列舉列表中的一個值 ID 值為唯一的 id IDREF 值為另外一個元素的 id IDREFS 值為其他 id 的列表 NMTOKEN 值為合法的 XML 名稱 NMTOKENS 值為合法的 XML 名稱的列表 ENTITY 值是一個實體 ENTITIES 值是一個實體列表 NOTATION 此值是符號的名稱 xml: 值是一個預定義的 XML 值 -
預設屬性值
值 解釋 值 屬性的預設值 #REQUIRED 屬性值是必需的 #IMPLIED 屬性不是必需的 #FIXED value 屬性值是固定的 -
示例
DTD: <!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0"> 合法的 XML: <square width="100" />
-
< !ATTLIST element-name attribute-name attribute-type #REQUIRED>
DTD: <!ATTLIST person number CDATA #REQUIRED> 合法的 XML: <person number="5677" /> 非法的 XML: <person />
-
< !ATTLIST element-name attribute-name attribute-type #IMPLIED>
DTD: <!ATTLIST contact fax CDATA #IMPLIED> 合法的 XML: <contact fax="555-667788" /> 合法的 XML: <contact />
-
< !ATTLIST element-name attribute-name attribute-type #FIXED "value">
DTD: <!ATTLIST sender company CDATA #FIXED "Microsoft"> 合法的 XML: <sender company="Microsoft" /> 非法的 XML: <sender company="W3Schools" />
-
< !ATTLIST element-name attribute-name (en1|en2|..) default-value>
DTD: <!ATTLIST payment type (check|cash) "cash"> XML 例子: <payment type="check" /> 或 <payment type="cash" />
SVG
初識
- SVG 意為可縮放向量圖形(Scalable Vector Graphics)。
- SVG 使用 XML 格式定義影象。
- 什麼是SVG
- SVG 指可伸縮向量圖形 (Scalable Vector Graphics)
- SVG 用來定義用於網路的基於向量的圖形
- SVG 使用 XML 格式定義圖形
- SVG 影象在放大或改變尺寸的情況下其圖形質量不會有所損失
- SVG 是全球資訊網聯盟的標準
- SVG 與諸如 DOM 和 XSL 之類的 W3C 標準是一個整體
- SVG 於 2003 年 1 月 14 日成為 W3C 推薦標準。
- SVG的歷史和優勢
- 在 2003 年一月,SVG 1.1 被確立為 W3C 標準。參與定義 SVG 的組織有:Sun公司(已被Oracle公司收購)、Adobe、蘋果公司、IBM 以及柯達。
- 優勢
- SVG 可被非常多的工具讀取和修改(比如記事本)
- SVG 與 JPEG 和 GIF 影象比起來,尺寸更小,且可壓縮性更強。
- SVG 是可伸縮的
- SVG 影象可在任何的解析度下被高質量地列印
- SVG 可在影象質量不下降的情況下被放大
- SVG 影象中的文字是可選的,同時也是可搜尋的(很適合製作地圖)
- SVG 可以與 Java 技術一起執行
- SVG 是開放的標準
- SVG 檔案是純粹的 XML
使用
-
示例程式碼
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </svg>
- 解析
- 第一行包含了 XML 宣告。請注意 standalone 屬性!該屬性規定此 SVG 檔案是否是"獨立的",或含有對外部檔案的引用。
- standalone="no" 意味著 SVG 文件會引用一個外部檔案 - 在這裡,是 DTD 檔案。
- 第二和第三行引用了這個外部的 SVG DTD。該 DTD 位於 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"。該 DTD 位於 W3C,含有所有允許的 SVG 元素
- SVG 程式碼以 < svg >元素開始,包括開啟標籤和關閉標籤 < /svg> 。這是根元素。width 和 height 屬性可設定此 SVG 文件的寬度和高度。version 屬性可定義所使用的 SVG 版本,xmlns 屬性可定義 SVG 名稱空間。
- SVG 的 < circle> 用來建立一個圓。cx 和 cy 屬性定義圓中心的 x 和 y 座標。如果忽略這兩個屬性,那麼圓點會被設定為 (0, 0)。r 屬性定義圓的半徑。
- stroke 和 stroke-width 屬性控制如何顯示形狀的輪廓。我們把圓的輪廓設定為 2px 寬,黑邊框。
- fill 屬性設定形狀內的顏色。我們把填充顏色設定為紅色。
- 關閉標籤的作用是關閉 SVG 元素和文件本身。
- 註釋:所有的開啟標籤必須有關閉標籤!
- 解析
-
在HTML中使用SVG
-
SVG 檔案可通過以下標籤嵌入 HTML 文件:
-
SVG的程式碼可以直接嵌入到HTML頁面中,或您可以直接連結到SVG檔案。
-
使用< embed>標籤
-
優勢:所有主要瀏覽器都支援,並允許使用指令碼
-
缺點:不推薦在HTML4和XHTML中使用(但在HTML5允許)
-
示例
<embed src="circle1.svg" type="image/svg+xml" />
-
-
使用< object>標籤
-
優勢:所有主要瀏覽器都支援,並支援HTML4,XHTML和HTML5標準
-
缺點:不允許使用指令碼。
-
示例
<object data="circle1.svg" type="image/svg+xml"></object>
-
-
使用< iframe>標籤
-
優勢:所有主要瀏覽器都支援,並允許使用指令碼
-
缺點:不推薦在HTML4和XHTML中使用(但在HTML5允許)
-
示例
<iframe src="circle1.svg"></iframe>
-
-
直接在HTML中嵌入SVG
-
在Firefox、Internet Explorer9、谷歌Chrome和Safari中,你可以直接在HTML嵌入SVG程式碼。
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" /> </svg>
-
-
連結一個SVG檔案
-
示例
<a href="circle1.svg">View SVG file</a>
-
矩形
-
< rect> 標籤可用來建立矩形,以及矩形的變種
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/> </svg>
- rect 元素的 width 和 height 屬性可定義矩形的高度和寬度
- style 屬性用來定義 CSS 屬性
- CSS 的 fill 屬性定義矩形的填充顏色(rgb 值、顏色名或者十六進位制值)
- CSS 的 stroke-width 屬性定義矩形邊框的寬度
- CSS 的 stroke 屬性定義矩形邊框的顏色
-
示例2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:pink;stroke-width:5;fill-opacity:0.1; stroke-opacity:0.9"/> </svg>
- x 屬性定義矩形的左側位置(例如,x="0" 定義矩形到瀏覽器視窗左側的距離是 0px)
- y 屬性定義矩形的頂端位置(例如,y="0" 定義矩形到瀏覽器視窗頂端的距離是 0px)
- CSS 的 fill-opacity 屬性定義填充顏色透明度(合法的範圍是:0 - 1)
- CSS 的 stroke-opacity 屬性定義輪廓顏色的透明度(合法的範圍是:0 - 1)
-
示例3
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="50" y="20" width="150" height="150" style="fill:blue;stroke:pink;stroke-width:5;opacity:0.5"/> </svg>
- CSS opacity 屬性用於定義了元素的透明值 (範圍: 0 到 1)。
-
示例4
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <rect x="50" y="20" rx="20" ry="20" width="150" height="150" style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/> </svg>
- rx 和 ry 屬性可使矩形產生圓角。
圓形
-
< circle> 標籤可用來建立一個圓
-
示例1
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/> </svg>
- cx和cy屬性定義圓點的x和y座標。如果省略cx和cy,圓的中心會被設定為(0, 0)
- r屬性定義圓的半徑
橢圓
-
< ellipse> 元素是用來建立一個橢圓
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <ellipse cx="300" cy="80" rx="100" ry="50" style="fill:yellow;stroke:purple;stroke-width:2"/> </svg>
- CX屬性定義的橢圓中心的x座標
- CY屬性定義的橢圓中心的y座標
- RX屬性定義的水平半徑
- RY屬性定義的垂直半徑
直線
-
< line> 元素是用來建立一個直線
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <line x1="0" y1="0" x2="200" y2="200" style="stroke:rgb(255,0,0);stroke-width:2"/> </svg>
- x1 屬性在 x 軸定義線條的開始
- y1 屬性在 y 軸定義線條的開始
- x2 屬性在 x 軸定義線條的結束
- y2 屬性在 y 軸定義線條的結束
多邊形
-
< polygon> 標籤用來建立含有不少於三個邊的圖形。
-
多邊形是由直線組成,其形狀是"封閉"的(所有的線條 連線起來)。
-
示例
<svg height="210" width="500"> <polygon points="200,10 250,190 160,210" style="fill:lime;stroke:purple;stroke-width:1"/> </svg>
- points 屬性定義多邊形每個角的 x 和 y 座標
-
示例2(五角星)
<svg height="210" width="500"> <polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:nonzero;" /> </svg>
- fill-rule 屬性用於指定使用哪一種演算法去判斷畫布上的某區域是否屬於該圖形“內部” (內部區域將被填充)。對一個簡單的無交叉的路徑,哪塊區域是“內部” 是很直觀清除的。但是,對一個複雜的路徑,比如自相交或者一個子路徑包圍另一個子路徑,“內部”的理解就不那麼明確了。
- fill-rule 屬性提供兩種選項用於指定如何判斷圖形的“內部”:
- nonzero規則字面意思是“非零”。按該規則,要判斷一個點是否在圖形內,從該點作任意方向的一條射線,然後檢測射線與圖形路徑的交點情況。從0開始計數,路徑從左向右穿過射線則計數加1,從右向左穿過射線則計數減1。得出計數結果後,如果結果是0,則認為點在圖形外部,否則認為在內部。
- evenodd 規則字面意思是“奇偶”。按該規則,要判斷一個點是否在圖形內,從該點作任意方向的一條射線,然後檢測射線與圖形路徑的交點的數量。如果結果是奇數則認為點在內部,是偶數則認為點在外部。
曲線
-
< polyline> 元素是用於建立任何只有直線的形狀
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <polyline points="20,20 40,25 60,40 80,120 120,140 200,180" style="fill:none;stroke:black;stroke-width:3" /> </svg>
路徑
-
< path> 元素用於定義一個路徑。
-
下面的命令可用於路徑資料:
- M = moveto
- L = lineto
- H = horizontal lineto
- V = vertical lineto
- C = curveto
- S = smooth curveto
- Q = quadratic Bézier curve
- T = smooth quadratic Bézier curveto
- A = elliptical Arc
- Z = closepath
- 注意:以上所有命令均允許小寫字母。大寫表示絕對定位,小寫表示相對定位。
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <path d="M150 0 L75 200 L225 200 L88 100 Z" stroke="green" fill="red" /> </svg>
- 開始於位置150 0,到達位置75 200,然後從那裡開始到225 200,最後在150 0關閉路徑。
文字
-
< text> 元素用於定義文字。
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <text x="0" y="15" fill="red">I love SVG</text> </svg>
-
示例2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <text x="0" y="15" fill="red" transform="rotate(30 20,40)">I love SVG</text> </svg>
stroke屬性
- SVG提供了一個範圍廣泛stroke 屬性
- stroke(描繪顏色,可以設定為顏色名稱或者rgb值)
- stroke-width(描繪線條的粗細,使用數字表示線條的粗細畫素值)
- stroke-linecap(線段末端的型別,可選值:butt、round、square)
- stroke-dasharray(建立虛線,使用數字表示每段實線的長度)
濾鏡
- feBlend - 與影象相結合的濾鏡
- feColorMatrix - 用於彩色濾光片轉換
- feComponentTransfer
- feComposite
- feConvolveMatrix
- feDiffuseLighting
- feDisplacementMap
- feFlood
- feGaussianBlur
- feImage
- feMerge
- feMorphology
- feOffset - 過濾陰影
- feSpecularLighting
- feTile
- feTurbulence
- feDistantLight - 用於照明過濾
- fePointLight - 用於照明過濾
- feSpotLight - 用於照明過濾
模糊效果
-
注意: Internet Explorer和Safari不支援SVG濾鏡!
-
所有網際網路的SVG濾鏡定義在< defs>元素中。< defs>元素定義短並含有特殊元素(如濾鏡)定義。
-
< feGaussianBlur> 元素是用於建立模糊效果
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="f1" x="0" y="0"> <feGaussianBlur in="SourceGraphic" stdDeviation="15" /> </filter> </defs> <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> </svg>
-
< filter>元素id屬性定義一個濾鏡的唯一名稱
-
< feGaussianBlur>元素定義模糊效果
-
in="SourceGraphic"這個部分定義了由整個影象建立效果
-
stdDeviation屬性定義模糊量
-
元素的濾鏡屬性用來把元素連結到"f1"濾鏡
-
陰影
-
< feOffset>元素是用於建立陰影效果。我們的想法是採取一個SVG圖形(影象或元素)並移動它在xy平面上一點兒。
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="f1" x="0" y="0" width="200%" height="200%"> <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" /> <feBlend in="SourceGraphic" in2="offOut" mode="normal" /> </filter> </defs> <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> </svg>
- < filter>元素id屬性定義一個濾鏡的唯一名稱
- < rect>元素的濾鏡屬性用來把元素連結到"f1"濾鏡
-
示例2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="f1" x="0" y="0" width="200%" height="200%"> <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" /> <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> </filter> </defs> <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> </svg>
- < feGaussianBlur>元素的stdDeviation屬性定義了模糊量
-
示例3
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="f1" x="0" y="0" width="200%" height="200%"> <feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" /> <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> </filter> </defs> <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> </svg>
- < feOffset>元素的屬性改為"SourceAlpha"在Alpha通道使用殘影,而不是整個RGBA畫素。
-
示例4
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <filter id="f1" x="0" y="0" width="200%" height="200%"> <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" /> <feColorMatrix result="matrixOut" in="offOut" type="matrix" values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" /> <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> </filter> </defs> <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> </svg>
- < feColorMatrix>過濾器是用來轉換偏移的影象使之更接近黑色的顏色。 '0.2'矩陣的三個值都獲取乘以紅色,綠色和藍色通道。降低其值帶來的顏色至黑色(黑色為0)
漸變
-
漸變是一種從一種顏色到另一種顏色的平滑過渡。另外,可以把多個顏色的過渡應用到同一個元素上。SVG漸變主要有兩種型別:
- Linear
- Radial
-
< linearGradient>元素用於定義線性漸變。
-
< linearGradient>標籤必須巢狀在
的內部。 標籤是definitions的縮寫,它可對諸如漸變之類的特殊元素進行定義。 -
線性漸變可以定義為水平,垂直或角漸變:
- 當y1和y2相等,而x1和x2不同時,可建立水平漸變
- 當x1和x2相等,而y1和y2不同時,可建立垂直漸變
- 當x1和x2不同,且y1和y2不同時,可建立角形漸變
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /> </linearGradient> </defs> <ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" /> </svg>
- < linearGradient>標籤的id屬性可為漸變定義一個唯一的名稱
- < linearGradient>標籤的X1,X2,Y1,Y2屬性定義漸變開始和結束位置
- 漸變的顏色範圍可由兩種或多種顏色組成。每種顏色通過一個< stop>標籤來規定。offset屬性用來定義漸變的開始和結束位置。
- 填充屬性把 ellipse 元素連結到此漸變
-
示例2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="0%" y2="100%"> <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /> </linearGradient> </defs> <ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" /> </svg>
-
示例3
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" /> <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" /> </linearGradient> </defs> <ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" /> <text fill="#ffffff" font-size="45" font-family="Verdana" x="150" y="86"> SVG</text> </svg>
- < text> 元素是用來新增一個文字
-
< radialGradient>元素用於定義放射性漸變。
-
< radialGradient>標籤必須巢狀在< defs>的內部。< defs>標籤是definitions的縮寫,它可對諸如漸變之類的特殊元素進行定義。
-
示例
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"> <stop offset="0%" style="stop-color:rgb(255,255,255); stop-opacity:0" /> <stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" /> </radialGradient> </defs> <ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" /> </svg>
- < radialGradient>標籤的 id 屬性可為漸變定義一個唯一的名稱
- CX,CY和r屬性定義的最外層圓和Fx和Fy定義的最內層圓
- 漸變顏色範圍可以由兩個或兩個以上的顏色組成。每種顏色用一個
標籤指定。offset屬性用來定義漸變色開始和結束 - 填充屬性把ellipse元素連結到此漸變
-
示例2
<svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <defs> <radialGradient id="grad1" cx="20%" cy="30%" r="30%" fx="50%" fy="50%"> <stop offset="0%" style="stop-color:rgb(255,255,255); stop-opacity:0" /> <stop offset="100%" style="stop-color:rgb(0,0,255);stop-opacity:1" /> </radialGradient> </defs> <ellipse cx="200" cy="70" rx="85" ry="55" fill="url(#grad1)" /> </svg>