ข้อตกลงกรณีเกี่ยวกับชื่อองค์ประกอบ?


120

มีคำแนะนำอย่างเป็นทางการเกี่ยวกับองค์ประกอบใน XML หรือไม่

ฉันรู้ว่า XHTML ใช้ชื่อองค์ประกอบตัวพิมพ์เล็ก (ซึ่งตรงข้ามกับ HTML ซึ่งใช้ตัวพิมพ์ใหญ่ตามรูปแบบบัญญัติ แต่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่)

แต่ฉันกำลังพูดถึง XML สำหรับเนื้อหาทั่วไป

ตัวพิมพ์เล็ก:

<customer> 
   <accountnumber>619</accountnumber>
   <name>Shelby Lake</name>
</customer>

CamelCase:

<customer> 
   <accountNumber>619</accountNumber>
   <name>Shelby Lake</name>
</customer>

PascalCase:

<Customer> 
   <AccountNumber>619</AccountNumber>
   <Name>Shelby Lake</Name>
</Customer>

ตัวพิมพ์ใหญ่:

<CUSTOMER> 
   <ACCOUNTNUMBER>619</ACCOUNTNUMBER>
   <NAME>Shelby Lake</NAME>
</CUSTOMER>

หมายเหตุ:ฉันกำลังมองหาแนวทางที่อ้างถึงมากกว่าความคิดเห็น แต่ความเห็นที่มีคะแนนโหวตมากที่สุดถือได้ว่าเป็นแนวทาง


คำตอบ:


88

มาตรฐาน XML ส่วนใหญ่ที่มาจาก W3C มักจะใช้ตัวพิมพ์เล็กที่มีขีดกลาง

มีความแตกต่างทางปรัชญาระหว่างการมองว่า XML เป็นรูปแบบสำหรับเอกสารที่เป็นกลางของแพลตฟอร์มซึ่งมาตรฐาน W3C พยายามสนับสนุนและภาษาเช่น XAML ซึ่งมองว่า XML เป็นอนุกรมของกราฟออบเจ็กต์เฉพาะแพลตฟอร์ม

หากคุณไม่ได้ใช้ XML เป็นรูปแบบเอกสารที่เป็นกลางของแพลตฟอร์ม แต่เป็นการทำให้เป็นอนุกรมเฉพาะของแอปพลิเคชันคุณอาจช่วยตัวเองไม่ได้และมีการโต้ตอบแบบ 1: 1 ระหว่างชื่อ XML และชื่อเฉพาะแพลตฟอร์ม แต่เกือบทุกรูปแบบกราฟออบเจ็กต์อื่น ๆ จะดีกว่า XML สำหรับจุดประสงค์นั้น

หากคุณเป็นเช่นนั้นคุณอาจต้องการพอดีกับ XHTML, XSLT, SVG, XProc, RelaxNG และส่วนที่เหลือ


7
ดังนั้นหมายความว่าแนะนำให้ใช้ตัวพิมพ์เล็กที่มีขีดกลางหรือไม่แนะนำ
WarFox

9
@WarFox ฉันไม่คิดว่าจะมีใครแนะนำอย่างเป็นทางการ IME รูปแบบที่มาจาก w3c สำหรับการทำงานร่วมกันมักจะอยู่ในรูปแบบยัติภังค์ รูปแบบที่มาจาก Microsoft และรูปแบบอื่น ๆ มีแนวโน้มที่จะเชื่อมโยงอย่างแน่นหนากับการนำไปใช้งานและรูปแบบสำหรับชื่อของวัตถุในภาษาที่ใช้สำหรับการนำไปใช้งาน หากคุณกำลังใช้ XML เพื่อแยกระบบการไม่เชื่อมโยง XML ของคุณกับรูปแบบภาษาขององค์ประกอบหนึ่งของระบบนั้นอาจบังคับให้คุณคิดในแง่ของข้อความมากกว่าวัตถุดังนั้นฉันขอแนะนำตัวพิมพ์เล็กและรูปแบบยัติภังค์
Pete Kirkham

5
โปรดทราบว่า 'ตัวพิมพ์เล็กที่มีขีดกลาง' มีปัญหาใน XSLT โดยเฉพาะอย่างยิ่งมันง่ายที่จะสร้างความสับสนให้กับโหนดที่เรียกว่า 'year-from-age' ด้วยสูตร 'year - age' (เช่นลบอายุจากปี)
Richard Kennard

3
@RichardKennard ความสับสนนั้นอาจเกิดขึ้นในระดับมนุษย์เท่านั้นหรือ? สำหรับ xslt ช่องว่างที่ต้องการ (?) รอบตัวดำเนินการให้ความแตกต่างที่ชัดเจนและไม่คลุมเครือถูกต้องหรือไม่?
Karl Kieninger

1
@KarlKieninger นั่นเป็นเรื่องจริง แต่ความสับสนในระดับมนุษย์เป็นเรื่องสำคัญ IMHO ดูคำตอบเพิ่มเติมของฉันด้านล่าง
Richard Kennard

64

ไม่ใช่เรื่องสำคัญ แต่ฉันมักจะเป็นส่วนหนึ่งของ PascalCase สำหรับ Elements และ camelCase สำหรับแอตทริบิวต์:

<Root>
  <ParentElement attributeId="1">
    <ChildElement attributeName="foo" />
  </ParentElement>
</Root>

31

ไม่มีคำแนะนำอย่างเป็นทางการ

เนื่องจาก XML ได้รับการออกแบบโดยมีวัตถุประสงค์สองประการในการเก็บเอกสารและแลกเปลี่ยนข้อมูลระหว่างระบบที่แตกต่างกันจึงได้รับการออกแบบมาเพื่อให้สามารถจับคู่แอปพลิเคชันที่ใช้งานได้

ดังนั้น. Net XML จึงมีแนวโน้มที่จะใช้ ProperCasing (พยาน XAML) ในขณะที่ XML อื่น ๆ จะใช้ camelCasing, python_conventions, dot.naming และแม้แต่ COBOL-CONVENTIONS W3C ดูเหมือนจะชอบตัวพิมพ์เล็กที่มีขีดกลาง - ค่อนข้างบิต (เช่น XSLT) หรือ justlowercasewordssmashedtogether (เช่น MathML)

ฉันชอบตัวพิมพ์เล็กทั้งหมดและไม่มีขีดล่างเนื่องจากนั่นหมายถึงการใช้ปุ่ม [Shift] น้อยลงและนิ้วของฉันก็ขี้เกียจเล็กน้อย :)


2
ดูเหมือนว่าหากมีจุดประสงค์ในการ "แลกเปลี่ยนข้อมูล" แล้วมาตรฐานสำหรับการตั้งชื่อก็เป็นที่ต้องการอย่างยิ่ง นอกจากนี้ยังใช้กับเอกสารใด ๆ ที่ใช้โดยการนำไปใช้งานเฉพาะมากกว่าหนึ่งรายการ (เช่นไม่ใช่การทำให้เป็นอนุกรมแบบครั้งเดียว)

25

เพื่อเพิ่มคำตอบของ Metro Smurf

รูปแบบการแลกเปลี่ยนข้อมูลแห่งชาติ (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) กล่าวว่าให้ใช้:

  • Upper CamelCase (PascalCase) สำหรับองค์ประกอบ
  • (ล่าง) camelCase สำหรับแอตทริบิวต์

NIEM เป็นตัวเลือกที่ดีเมื่อคุณต้องการที่จะปฏิบัติตามมาตรฐานบางอย่าง


1
นี่คือเอกสาร NIEM ที่อธิบายหลักการตั้งชื่อสำหรับแอตทริบิวต์และองค์ประกอบ: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45

ฉันรู้ว่ามันเก่า แต่ลิงก์ด้านบนเสีย แต่ดูเหมือนว่าลิงก์นี้จะมีการอัปเดตรายละเอียดเกี่ยวกับอนุสัญญา NIEM สำหรับ Elements / Attrubutes: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

เพื่อขยายความคิดเห็นของฉันด้านบน : การใช้ 'ตัวพิมพ์เล็กที่มีขีดกลาง' มีปัญหาบางอย่างใน XSLT โดยเฉพาะอย่างยิ่งมันง่ายที่จะสร้างความสับสนให้กับโหนดที่เรียกว่า 'year-from-age' ด้วยสูตร 'year - age' (เช่นลบอายุจากปี)

ดังที่ @KarlKieninger ชี้ให้เห็นว่านี่เป็นปัญหาในระดับมนุษย์เท่านั้นไม่ใช่สำหรับโปรแกรมแยกวิเคราะห์ XSLT อย่างไรก็ตามเนื่องจากสิ่งนี้มักจะไม่ก่อให้เกิดข้อผิดพลาดการใช้ "ตัวพิมพ์เล็กที่มีขีดกลาง" เป็นมาตรฐานจึงกำลังขอปัญหา IMHO

ตัวอย่างที่เกี่ยวข้อง:

<a>1</a><b>1</b>
<xsl:value-of select="a+b"/>
outputs 2, as expected

<a>1</a><b>1</b>
<xsl:value-of select="a-b"/>
DOES NOT ERROR, BUT OUTPUTS NOTHING AT ALL

ในโค้ดด้านบนคุณต้องเว้นวรรคอย่างน้อยหนึ่งช่องก่อนตัวดำเนินการลบ แต่ไม่มีข้อกำหนดดังกล่าวสำหรับตัวดำเนินการเพิ่มเติม

<a-b>1</a-b><c>1</c>
<xsl:value-of select="a-b -c"/>
outputs 0, as expected

แต่สังเกตว่าการอ่านข้างต้นนั้นสับสนแค่ไหน!

<a>1</a><a-b>3</a-b><b>2</b>
<xsl:value-of select="a-b"/>
outputs 3

<a>1</a><a-b>3</a-b><b>2</b>
<xsl:value-of select="a -b"/>
outputs -1

การมีช่องว่างเดียวจะเปลี่ยนเอาต์พุตด้านบน แต่ไม่มีตัวแปรใดที่เป็นข้อผิดพลาด


3
ขาย นอกจากนี้เครื่องมือสร้างรหัส MS .NET (xsd.exe) จะวางยัติภังค์เมื่อสร้างคลาส deserialization ดังนั้นถ้าคุณสมบัติเช่น "alpha-beta" คุณจะได้รับ "alphabeta" แทน ดังนั้นไม่เพียง แต่จะแปลไม่ตรงชื่อเท่านั้น แต่ยังอ่านยากกว่าด้วย และถ้าคุณต้องการสร้าง xml ด้วยยัติภังค์ MS SQL ก็มีความเจ็บปวดเช่นกัน สิ่งที่เฉพาะเจาะจงของ MS ไม่ควรกำหนดมาตรฐาน แต่มีการใช้งานที่กว้างพอที่ฉันคิดว่าสามารถนับเป็นข้อพิจารณาได้ และมันนำฉันไปสู่ตัวพิมพ์เล็กหรือตัวพิมพ์เล็กที่คั่นด้วยขีดล่างหรือตัวพิมพ์เล็กผสม
Karl Kieninger

1
ดูเหมือนว่า XSD.exe จะเพิ่ม XmlElementAttribute ให้กับคุณสมบัติส่วนใหญ่แล้วและหากมีเครื่องหมายยัติภังค์จะเพิ่มสตริง ElementName เป็นพารามิเตอร์แรกอย่างชัดเจนเพื่อให้มีการชี้แจง ปัญหาที่ฉันพบคือขึ้นอยู่กับไลบรารี. NET ของคุณสิ่งนี้อาจไม่สำคัญ - องค์ประกอบยังไม่ได้ deserialize ในบางระบบ ทำงานใน VS2012 บน Win7 แต่ไม่ได้ทำงานเป็น EXE บนเซิร์ฟเวอร์ 2008
David Storfer

13

ดูข้อกำหนดทางเทคนิคของการตั้งชื่อและการออกแบบ XML UN / CEFACT เวอร์ชัน 3.0 หน้า 23 สำหรับกฎตัวอย่างบางส่วนที่ใช้ในมาตรฐานต่างๆ

ข้อมูลเฉพาะ (จากหน้า 23 ของเวอร์ชัน 3.0 ลงวันที่ 17 ธันวาคม 2552):

  • ต้องใช้ LowerCamelCase (LCC) สำหรับการตั้งชื่อแอตทริบิวต์
  • ต้องใช้ UpperCamelCase (UCC) สำหรับการตั้งชื่อองค์ประกอบและประเภท
  • ชื่อองค์ประกอบแอตทริบิวต์และประเภทต้องอยู่ในรูปเอกพจน์เว้นแต่ว่าแนวคิดจะเป็นพหูพจน์

( ลิงค์อื่น ๆ ไซต์สวีเดน )


2
-1: ลิงค์ของคุณเสีย - อาจเป็น URL ภายใน? โปรดแก้ไขและฉันจะลบการลงคะแนนให้
John Saunders

3
ในขณะที่น่าสนใจอย่างแน่นอนเอกสารที่ยกมาในส่วน / หน้าเฉพาะนี้สร้างกฎสำหรับ XML Schemasไม่ใช่เอกสารแยกวิเคราะห์ / xml ที่เป็นไปตามสคีมานี้ สองสิ่งนี้แตกต่างกัน
MrCC

สำหรับใครก็ตามที่สงสัยว่าความแตกต่างระหว่าง LowerCamelCase และ UpperCamelCase คืออะไร: mySettingName เป็นตัวอย่างของ LowerCamelCase (ซึ่งอาจเรียกได้ว่าฉลาดกว่าในการเรียก lowerCamelCase) และ MySettingName เป็นตัวอย่างของ UpperCamelCase
Jinlye


4

เจตนาเดิมสำหรับการหุ้ม XML เป็นตัวพิมพ์เล็กที่มีขีดกลาง เป็นเรื่องละเอียดอ่อนและไม่จำเป็นต้องให้คุณทำตามแบบแผนนั้น - ดังนั้นคุณสามารถทำอะไรก็ได้ที่คุณต้องการ ฉันไม่มีการอ้างอิงขออภัย


1

ฉันจะไม่บอกว่า HTML "ตามรูปแบบบัญญัติ" ใช้ตัวพิมพ์ใหญ่ ฉันคิดว่า แต่เดิมตัวพิมพ์ใหญ่ถูกใช้เพื่อแยก HTML ออกจากเนื้อหาได้ง่ายขึ้น ด้วยการเน้นไวยากรณ์ในปัจจุบันจึงไม่จำเป็น

ฉันหันไปทางตัวพิมพ์เล็กโดยมีขีดกลางหากจำเป็น (พิมพ์เร็วกว่าด้วย) กรณีการผสมใน XML รู้สึกผิดกับฉัน


HTML ไม่เชื่อเรื่องพระเจ้า นี่ไม่ใช่ XML / XHTML เดียวกัน

-2

กรณีอูฐได้รับการโหวตของฉัน

สำหรับตัวอย่างที่อ้างถึงบางทีคำถามนี้อาจเป็นลิงค์ที่ผู้คนอ้างถึง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.