กลับไปหน้าบทความ

อ่าน 10 นาที

ไม่มีชื่อบทความ

In computer hypertext , a URI fragment is a string of characters that refers to a resource that is subordinate to another, primary resource.

URI fragment

In computer hypertext, a URI fragment is a string of characters that refers to a resource that is subordinate to another, primary resource. The primary resource is identified by a Uniform Resource Identifier (URI), and the fragment identifier points to the subordinate resource.

The fragment identifier introduced by a hash mark# is the optional last part of a URL for a document. It is typically used to identify a portion of that document. The generic syntax is specified in RFC 3986.[1] The hash mark separator in URIs is not part of the fragment identifier.

Basics

In URIs, a hash mark # introduces the optional fragment near the end of the URL. The generic RFC 3986 syntax for URIs also allows an optional query part introduced by a question mark ?. In URIs with a query and a fragment, the fragment follows the query. Query parts depend on the URI scheme and are evaluated by the server—e.g., http: supports queries unlike ftp:. Fragments depend on the document MIME type and are evaluated by the client (web browser). Clients are not supposed to send URI fragments to servers when they retrieve a document.[1][2]

A URI ending with # is permitted by the generic syntax and is a kind of empty fragment. In MIME document types such as text/html or any XML type, empty identifiers to match this syntactically legal construct are not permitted. Web browsers typically display the top of the document for an empty fragment.

The fragment identifier functions differently to the rest of the URI: its processing is exclusively client-sided with no participation from the web server, though the server typically helps to determine the MIME type, and the MIME type determines the processing of fragments. When an agent (such as a web browser) requests a web resource from a web server, the agent sends the URI to the server, but does not send the fragment. Instead, the agent waits for the server to send the resource, and then the agent processes the resource according to the document type and fragment value.[3]

In an HTML web page, the agent will look for an anchor identified with an HTML tag that includes an id= or name= attribute equal to the fragment identifier.

Examples

  • ใน URI สำหรับtext/htmlหน้า MIME เช่นhttp://www.example.org/foo.html#barส่วนย่อยจะอ้างอิงถึงองค์ประกอบที่มีจุด ( id="bar".)
    • โดยทั่วไปแล้วเว็บเบราว์เซอร์แบบกราฟิกจะเลื่อนเพื่อจัดตำแหน่งหน้าเว็บเพื่อให้ส่วนบนขององค์ประกอบที่ระบุโดยรหัสส่วนย่อยอยู่ในแนวเดียวกับส่วนบนของวิวพอร์ต[ 4 ]ดังนั้นตัวระบุส่วนย่อยจึงมักใช้ในสารบัญ
    • ลักษณะขององค์ประกอบที่ระบุสามารถเปลี่ยนแปลงได้ผ่านคลาสเสมือน:targetCSS [ 5 ]วิกิพีเดียใช้สิ่งนี้เพื่อเน้นการอ้างอิงที่เลือก ที่น่าสังเกตคือ CSS สามารถใช้เพื่อแสดงเนื้อหาเฉพาะเมื่อเป็นเป้าหมายเท่านั้น และจะถูกซ่อนไว้หาก ไม่ใช่เป้าหมายdisplay: blockdisplay: none
    • คุณลักษณะnameของ<a>องค์ประกอบทำหน้าที่เดียวกัน แต่ปัจจุบันล้าสมัยไปแล้ว โดยสามารถidใช้คุณลักษณะที่สามารถนำไปใช้กับองค์ประกอบใดก็ได้แทน[ 6 ]
  • ในเอกสารXML ทุกประเภท รวมถึงส่วนย่อย XHTMLที่สอดคล้องกับแอตทริบิวต์xml:idหรือidแอตทริบิวต์ที่คล้ายกัน จะใช้Nameไวยากรณ์ และเริ่มต้นด้วยตัวอักษร เครื่องหมายขีดล่าง หรือเครื่องหมายโคลอน ที่สำคัญคือไม่สามารถเริ่มต้นด้วยตัวเลขหรือเครื่องหมายยัติภังค์ได้[ 7 ]
    • xml:idเป็นหนึ่งในแอตทริบิวต์ XML ทั่วไปไม่กี่ตัว เช่นxml:langซึ่งสามารถใช้งานได้โดยไม่ต้องประกาศเนมสเปซอย่างชัดเจน[ 8 ]ใน XHTML idก็สามารถใช้งานได้เช่นกัน และดูเหมือนว่าจะเป็นที่นิยมมากกว่า[ 9 ] [ 10 ]เนื่องจาก XHTML ถูกกำหนดไว้ก่อนที่xml:idจะมีอยู่แล้ว
  • ในแอปพลิเคชัน XML ตัวระบุส่วนย่อยในไวยากรณ์บางอย่างสามารถเป็นXPointer ได้ [ 11 ] [ 12 ] ตัวอย่างเช่น ตัวระบุส่วนย่อยใน URI http://www.example.org/foo.xml#xpointer(//Rube)อ้างอิงถึงองค์ประกอบ XML ทั้งหมดที่ชื่อ "Rube" ในเอกสารที่ระบุโดย URI http://www.example.org/foo.xmlตัวประมวลผล XPointer เมื่อได้รับ URI นั้น จะได้รับตัวแทนของเอกสาร (เช่น โดยการขอจากอินเทอร์เน็ต) และจะส่งคืนตัวแทนขององค์ประกอบ "Rube" ของเอกสาร
  • ใน คำศัพท์ RDFเช่นRDFS , OWLหรือSKOSตัวระบุส่วนย่อย (fragment identifiers) ใช้เพื่อระบุทรัพยากรในเนมสเปซ XML เดียวกัน แต่ไม่จำเป็นต้องตรงกับส่วนใดส่วนหนึ่งของเอกสารโดยเฉพาะ ตัวอย่างเช่นhttp://www.w3.org/2004/02/skos/core#broaderระบุแนวคิด "broader" ในคำศัพท์ SKOS Core แต่ไม่ได้อ้างอิงถึงส่วนใดส่วนหนึ่งของทรัพยากรที่ระบุโดย ซึ่งเป็นhttp://www.w3.org/2004/02/skos/coreไฟล์ RDF ที่สมบูรณ์ซึ่งมีการประกาศความหมายของแนวคิดเฉพาะนี้ พร้อมกับแนวคิดอื่นๆ ในคำศัพท์เดียวกัน
  • ใน URI สำหรับtext/plainเอกสาร MIME RFC 5147ระบุตัวระบุส่วนย่อยสำหรับตำแหน่งอักขระและบรรทัดและช่วงภายในเอกสารโดยใช้คำหลัก " char" และ " line" และสามารถเพิ่มการตรวจสอบความสมบูรณ์ได้ ไม่ว่าจะเป็น " length" หรือ " md5" [ 13 ]ดูเหมือนว่าการสนับสนุนเบราว์เซอร์จะขาดหายไป[ 14 ]ตัวอย่างต่อไปนี้ระบุบรรทัดที่ 11 ถึง 20 ของเอกสารข้อความ:
    • http://example.com/document.txt#line=10,20
  • ใน URI สำหรับtext/csvเอกสาร MIME, RFC 7111ระบุตัวระบุส่วนย่อยเป็นตัวเลือกสำหรับแถว คอลัมน์ และเซลล์โดยใช้คำหลัก " row" , " col" และ " cell" [ 15 ]ตัวอย่างเช่น:
    • http://example.com/data.csv#row=4– เลือกแถวที่ 4
    • http://example.com/data.csv#col=2– เลือกคอลัมน์ที่ 2
    • http://example.com/data.csv#row=5-7– เลือกสามแถวที่ต่อเนื่องกัน โดยเริ่มจากแถวที่ 5
    • http://example.com/data.csv#row=5-*– เลือกทุกแถวโดยเริ่มจากแถวที่ 5
    • http://example.com/data.csv#cell=4,1-6,2– เลือกขอบเขตที่เริ่มต้นที่แถวที่ 4 และคอลัมน์ที่ 1 และสิ้นสุดที่แถวที่ 6 และคอลัมน์ที่ 2
  • ใน URI สำหรับเอกสาร MIME audio/*, image/*, video/* มีเพียงไม่กี่รายการที่มีการกำหนดแฟรกเมนต์หรือความหมายของแฟรกเมนต์[ 16 ]ไวยากรณ์ Media Fragments URI 1.0 (พื้นฐาน) รองรับการอ้างอิงทรัพยากรสื่อตามสองมิติ (เวลาและพื้นที่) โดยใช้คำหลักtและxywhและ Media Fragments 1.0 URI (ขั้นสูง) เพิ่มและtrack[ 17 ] ดังนั้นเราสามารถใช้ URI แฟรกเมนต์สื่อต่อไปนี้ในแอตทริบิวต์ของ องค์ประกอบ หรือHTML5ได้: idsrcaudiovideo
    • http://example.com/foo.mp4#t=10,20(นี่หมายถึงช่วงเวลาที่เริ่มต้นที่ 10 วินาทีและสิ้นสุดก่อน 20 วินาที)
    • http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
    • ข้อกำหนดนี้ยังอนุญาตให้ระบุชั่วโมง นาที (ต้องเป็นตัวเลข 2 หลัก) และวินาที (ต้องเป็นตัวเลข 2 หลัก) โดยใช้เครื่องหมายโคลอน และมิลลิวินาทีโดยใช้จุดทศนิยม นอกจากนี้ยังสามารถระบุรูปแบบเวลาอื่นๆ ได้โดยใช้คำนำหน้า โดยnpt:(เวลาเล่นปกติ) เป็นค่าเริ่มต้น
    • เว็บไซต์อื่นๆ ใช้ส่วนย่อยเพื่อส่งข้อมูลเพิ่มเติมบางอย่างไปยังสคริปต์ที่ทำงานบนเว็บไซต์เหล่านั้น ตัวอย่างเช่นGoogle Videoเข้าใจเพอร์มาลิงก์ในรูปแบบ#01h25m30sเพื่อเริ่มเล่นที่ตำแหน่งที่ระบุ[ 18 ]และYouTube#t=3m25s ใช้โค้ดที่ คล้ายกัน เช่น[ 19 ]
  • ในJavaScriptสามารถเข้าถึงตัวระบุส่วนย่อยของหน้า HTML หรือ XHTML ปัจจุบันได้ในคุณสมบัติ "hash" location.hash[ 20 ] – JavaScript ยังสามารถใช้กับเอกสารประเภทอื่นได้อีกด้วย ด้วยการเกิดขึ้นของAJAXเว็บไซต์บางแห่งใช้ตัวระบุส่วนย่อยเพื่อจำลองพฤติกรรมปุ่มย้อนกลับของเบราว์เซอร์สำหรับการเปลี่ยนหน้าที่ไม่ต้องโหลดซ้ำ หรือเพื่อจำลองหน้าย่อย
    • ตัวอย่างเช่นGmailใช้ URL เดียวสำหรับอินเทอร์เฟซเกือบทุกรายการ ไม่ว่าจะเป็นกล่องจดหมาย อีเมลแต่ละฉบับ ผลการค้นหา และการตั้งค่า โดยใช้ส่วนย่อยเพื่อทำให้อินเทอร์เฟซเหล่านี้สามารถเชื่อมโยงกันได้โดยตรง[ 21 ]
    • เว็บไซต์ Adobe Flashสามารถใช้ส่วน fragment เพื่อแจ้งให้ผู้ใช้ทราบถึงสถานะของเว็บไซต์หรือเว็บแอปพลิเคชันและเพื่ออำนวยความสะดวกในการเชื่อมโยงแบบ deep linkingซึ่งโดยทั่วไปจะใช้ไลบรารี JavaScript SWFAddress ช่วย
  • URI ที่เชื่อมโยงไปยัง เอกสาร JSONสามารถระบุตัวชี้ไปยังค่าเฉพาะได้[ 22 ]
    • ตัวอย่างเช่น URL ที่ลงท้ายด้วย#/fooสามารถใช้เพื่อดึงค่าจากคู่คีย์-ค่าในเอกสารที่ขึ้นต้นด้วย{ "foo": ["bar", "baz"], ... }
  • ใน URI สำหรับapplication/pdfเอกสาร MIME โปรแกรมดู PDF จะรู้จักตัวระบุส่วนย่อยจำนวนหนึ่ง[ 23 ] [ 24 ]ตัวอย่างเช่น URL ที่ลงท้ายด้วย.pdf#page=35จะทำให้โปรแกรมอ่านส่วนใหญ่เปิด PDF และเลื่อนไปที่หน้า 35 พารามิเตอร์อื่นๆ ที่เป็นไปได้อีกหลายอย่าง ได้แก่#nameddest=(คล้ายกับจุดยึด HTML) , #search="word1 word2", #zoom=เป็นต้น พารามิเตอร์หลายตัวสามารถรวมกันได้ด้วยเครื่องหมายแอมเปอร์แซนด์:
    • http://example.org/doc.pdf#view=fitb&nameddest=Chapter3.
  • ในSVGอนุญาตให้ระบุอาร์กิวเมนต์ให้กับแฟรกเมนต์ได้ เช่น,viewBox() , preserveAspectRatio()และ[ 25transform() ]
  • ในการระบุข้อความย่อยภายในข้อความ ส่วนที่แยกออกมา":~:text=[prefix-,]textStart[,textEnd][,-suffix]จะไฮไลต์ "textStart" หรือส่งต่อไปยัง "textEnd" หากมีการใช้ คำนำหน้าและคำต่อท้ายจะไม่ถูกไฮไลต์ แต่จะช่วยในการค้นหาข้อความบนหน้าเว็บ ตัวอย่าง: https://en.wikipedia.org/w/index.php?title=Cat&oldid=916388819#:~:text=Claws-,Like%20almost,the%20Felidae%2C,-cats [ 26 ]

ข้อเสนอ

มีการเสนอแนวทางหลายประการสำหรับตัวระบุส่วนย่อย เพื่อใช้กับ เอกสาร ข้อความธรรมดา (ซึ่งไม่สามารถจัดเก็บข้อมูลเมตาของจุดยึดได้) หรือเพื่ออ้างอิงถึงตำแหน่งภายในเอกสาร HTML ที่ผู้เขียนไม่ได้ใช้แท็กจุดยึด:

  • ณ เดือนกันยายน พ.ศ. 2555 Media Fragments URI 1.0 (พื้นฐาน) ถือเป็นข้อแนะนำของW3C [ 27 ]
  • Chrome เวอร์ชัน 80 ขึ้นไป[ 28 ] [ 29 ]และ Firefox เวอร์ชัน 131 ขึ้นไป[ 30 ]ใช้Text Fragments ของ WICGของW3C [ 31 ]ดังนั้นจะทำให้เบราว์เซอร์ค้นหาไฮไลต์ข้อความที่ตรงกัน และเลื่อนไปยังข้อความนั้น นอกจากจุดเริ่มต้นและจุดสิ้นสุดแล้ว snippet ยังสามารถระบุบริบทได้อีกด้วย: ข้อความที่ต้องอยู่ก่อนหน้าหรือตามหลังแต่จะไม่ถูกไฮไลต์ ( ตัวอย่างที่ใช้เพื่อค้นหา 'vision' ที่นำหน้าด้วย 'night')#:~:text=foofoofoo#:~:text=night-,vision)
  • ดัชนี แพ็กเกจ Pythonจะเพิ่ม แฮช MD5ของไฟล์ลงใน URL เป็นตัวระบุส่วนย่อย[ 32 ]หาก MD5 ไม่ถูกเจาะ (เป็นฟังก์ชันแฮชที่เสียหาย ) ก็สามารถใช้เพื่อรับรองความสมบูรณ์ของแพ็กเกจได้
    https://pypi.python.org ... zodbbrowser-0.3.1.tar.gz#md5=38dc89f294b24691d3f0d893ed3c119c
  • แฟ รกเมนต์ แฮชแบง[ 33 ]คือแฟรกเมนต์ที่เริ่มต้นด้วยเครื่องหมายอัศเจรีย์แฟรกเมนต์!นี้เคยใช้ในแนวทางที่เลิกใช้แล้วในการจัดทำดัชนีแอปพลิเคชันหน้าเดียว แบบไดนามิก เครื่องหมายอัศเจรีย์ นั้นผิดกฎหมายใน ตัวระบุ HTML4 , XHTML และ XML ซึ่งทำให้เกิดการแยกออกจากฟังก์ชันการทำงานดังกล่าวในระดับหนึ่ง อย่างไรก็ตาม เครื่องหมายอัศเจรีย์นั้นได้รับอนุญาตในHTML5 [ 34 ]
    • ระหว่างปี 2009 ถึง 2015 Google Webmaster Centralได้เสนอและแนะนำ "รูปแบบการรวบรวมข้อมูล AJAX" [ 35 ] [ 36 ]โดยใช้เครื่องหมายอัศเจรีย์เริ่มต้นในตัวระบุส่วนย่อยสำหรับหน้าAJAX ที่มีสถานะ:
      http://example.com/page?query#!state
    • การนำไปใช้อีกวิธีหนึ่งคือการแทนที่#!ด้วย?_escaped_fragment_=[ 35 ]
    • URI แบบแฮชแบงได้รับการพิจารณาว่าเป็นปัญหาโดยนักเขียนหลายคน รวมถึง Jeni Tennison ที่ W3C เนื่องจากทำให้หน้าเว็บไม่สามารถเข้าถึงได้สำหรับผู้ที่ไม่ได้ เปิดใช้งาน JavaScript ในเบราว์เซอร์ นอกจากนี้ยังทำให้ส่วนหัว Referer ของ HTTPเสียหายเนื่องจากเบราว์เซอร์ไม่ได้รับอนุญาตให้ส่งตัวระบุส่วนย่อยในส่วนหัว Referer [ 33 ]
    • ในปี 2558 Google ได้ยกเลิกข้อเสนอการรวบรวมข้อมูล AJAX แบบ hash-bang และแนะนำให้ใช้การปรับปรุงแบบก้าวหน้าและวิธีการของHTML5 แทน history.pushState()[ 37 ] [ 38 ]
    • Gervase Markham พนักงาน ของ Mozilla Foundationได้เสนอตัวระบุส่วนย่อยสำหรับการค้นหาในรูปแบบ#!s!search termsการเพิ่มตัวเลขหลัง s ( #!s10!) แสดงว่าเบราว์เซอร์ควรค้นหาคำค้นหา ที่ n#!s-3! ตัวเลขติดลบ ( ) จะเริ่มค้นหาย้อนหลังจากท้ายเอกสาร มี สคริปต์ Greasemonkeyที่สามารถเพิ่มฟังก์ชันนี้ให้กับเบราว์เซอร์ที่เข้ากันได้[ 39 ]
      http://example.com/index.html#!s3!search terms
  • Erik Wilde และ Marcel Baschnagel จากETH Zurichขยายสิ่งนี้เพื่อระบุส่วนย่อยในเอกสารข้อความธรรมดาโดยใช้การแสดงออกปกติด้วยคำหลัก " match" [ 40 ]พวกเขายังอธิบายการใช้งานต้นแบบเป็นส่วนขยายสำหรับ เบราว์เซอร์ Firefoxตัวอย่างเช่น ต่อไปนี้จะค้นหาข้อความที่ไม่คำนึงถึงตัวพิมพ์ใหญ่-เล็ก "RFC" ได้ทุกที่ในเอกสาร:
    http://example.com/document.txt#match=[rR][fF][cC]
  • K. Yee จากForesight Instituteเสนอ "ตัวระบุส่วนย่อยแบบขยาย" ที่คั่นด้วยเครื่องหมายโคลอนและคำหลักเพื่อแยกความแตกต่างจากตัวระบุจุดยึด ตัวระบุส่วนย่อยสำหรับการค้นหาข้อความที่มี "รูปแบบข้อกำหนดส่วนย่อย" id " words" เป็นข้อเสนอแรกในรูปแบบนี้[ 41 ]ตัวอย่างต่อไปนี้จะค้นหาเอกสารสำหรับการเกิดขึ้นครั้งแรกของสตริง "บริบทบางอย่างสำหรับคำค้นหา" จากนั้นไฮไลต์คำว่า "คำค้นหา":
    http://example.com/index.html#:words:some-context-for-a-(search-term)
  • โครงการ LiveURLs [ 42 ]เสนอรูปแบบตัวระบุส่วนย่อยสำหรับการอ้างอิงถึงส่วนของข้อความภายในหน้าเว็บ ในรูปแบบ#FWS+Cโดยที่Fคือความยาวของคำแรก (ไม่เกินห้าตัวอักษร) Wคือคำแรกนั้นเองSคือความยาวของข้อความที่เลือก และC คือ CRC 32 บิตของข้อความที่เลือก[ 43 ]พวกเขาได้นำรูปแบบนี้ไปใช้เป็นส่วนขยายสำหรับเบราว์เซอร์ Firefox [ 44 ]โดยใช้รูปแบบ#LFWS+Cโดยที่Lคือความยาวของส่วนย่อยนั้นเอง ใน เลขฐาน สิบหก สอง หลัก การเชื่อมโยงไปยังคำว่า "Fragment" โดยใช้รูปแบบที่นำไปใช้จะให้ผลลัพธ์ดังนี้:
    http://example.com/index.html#115Fragm8+-52f89c4c
  • จนถึง Firefox 5 Firefox รองรับ ลิงก์ XPathเช่น #xpath:/html/body/div[3] ซึ่งสามารถใช้ร่วมกับบุ๊กมาร์กเล็ตเช่นhttp://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/เพื่อเชื่อมโยงภายในเอกสาร HTML ที่ไม่มี ID ที่เหมาะสม คุณสมบัตินี้ถูกลบออกเป็นส่วนหนึ่งของการปรับปรุงโค้ดในhttps://bugzilla.mozilla.org/show_bug.cgi?id=457102
  • ใน รูปแบบหนังสืออิเล็กทรอนิกส์ ePubตัวระบุส่วนย่อยมาตรฐาน EPUB (epubcfi, [ 45 ] 2011-2017) กำหนด วิธีการที่เป็นมาตรฐาน W3C / IDPFสำหรับการอ้างอิงเนื้อหาใดๆ โดยใช้ตัวระบุส่วนย่อยเพื่อค้นหาช่วงข้อความที่ไม่ยึดติดผ่านโครงสร้างเอกสารและการจับคู่รูปแบบลิงก์เชิงลึกแบบไดนามิกเหล่านี้ช่วยในการค้นหาเนื้อหาหลังจากมีการอัปเดตข้อความ และใช้ในApple Booksเป็นต้น

ดูเพิ่มเติม

  • กลุ่มทำงานด้าน Media Fragmentsของ W3C กำลังกำหนดไวยากรณ์และความหมายของ URI เพื่อจัดการกับส่วนย่อยของสื่อในสื่อภาพและเสียง (เช่น บริเวณในภาพหรือคลิปย่อยของวิดีโอ)
  • พอร์ทัลชุมชน MediaMixer รวบรวมงานนำเสนอ บทช่วยสอน กรณีศึกษา และตัวอย่างการใช้งานที่เกี่ยวข้องกับเทคโนโลยี Media Fragment

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

In computer hypertext , a URI fragment is a string of characters that refers to a resource that is subordinate to another, primary resource.

Basics

In URIs, a hash mark # introduces the optional fragment near the end of the URL. The generic RFC 3986 syntax for URIs also allows an optional query part introduced by a question mark ? . In URIs with a query and a fragment, the fragment follows the query.

Examples

ใน URI สำหรับ text/html หน้า MIME เช่น http://www.example.org/foo.html #bar ส่วนย่อยจะอ้างอิงถึงองค์ประกอบที่มีจุด ( id="bar" .

ข้อเสนอ

มีการเสนอแนวทางหลายประการสำหรับตัวระบุส่วนย่อย เพื่อใช้กับ เอกสาร ข้อความธรรมดา (ซึ่งไม่สามารถจัดเก็บข้อมูลเมตาของจุดยึดได้) หรือเพื่ออ้างอิงถึงตำแหน่งภายในเอกสาร HTML ที่ผู้เขียนไม่ได้ใช้แท็กจุดยึด: