Quy ước trường hợp về tên phần tử?


120

Có khuyến nghị chính thức nào về cách viết hoa phần tử trong XML không?

Tôi biết XHTML sử dụng tên phần tử viết thường (trái ngược với HTML về mặt nguyên tắc sử dụng chữ hoa nhưng không phân biệt chữ hoa chữ thường).

Nhưng tôi đang nói về XML cho nội dung chung chung.

chữ thường:

<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>

UPPERCASE:

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

Lưu ý: Tôi đang tìm kiếm các nguyên tắc được trích dẫn thay vì ý kiến. Nhưng ý kiến ​​có nhiều phiếu thuận có thể được coi là kim chỉ nam.


Câu trả lời:


88

Hầu hết các tiêu chuẩn XML có nguồn gốc từ W3C có xu hướng sử dụng chữ thường với dấu gạch nối.

Có một sự khác biệt mang tính triết lý giữa việc coi XML là một định dạng cho các tài liệu trung lập của nền tảng, điều mà các tiêu chuẩn W3C cố gắng khuyến khích và các ngôn ngữ như XAML coi XML là sự tuần tự hóa của một biểu đồ đối tượng cụ thể của nền tảng.

Nếu bạn không sử dụng XML làm định dạng tài liệu trung lập của nền tảng, mà là định dạng tuần tự hóa ứng dụng cụ thể, thì bạn cũng có thể tiết kiệm cho mình một số phiền toái và có sự tương ứng 1: 1 giữa tên XML và tên nền tảng cụ thể. Nhưng hầu hết mọi định dạng đồ thị đối tượng khác đều tốt hơn XML cho mục đích đó.

Nếu có, thì bạn có thể muốn phù hợp với XHTML, XSLT, SVG, XProc, RelaxNG và phần còn lại.


7
vậy điều đó có nghĩa là viết thường với dấu gạch nối được khuyến khích hay không khuyến khích?
WarFox,

9
@WarFox Tôi không nghĩ có ai đưa ra đề xuất chính thức. IME, các định dạng đến từ w3c cho khả năng tương tác có xu hướng theo kiểu gạch nối; các định dạng đến từ Microsoft và một số định dạng khác có xu hướng được kết hợp chặt chẽ với một triển khai và quy ước về tên của các đối tượng trong ngôn ngữ được sử dụng để triển khai. Nếu bạn đang sử dụng XML để tách các hệ thống, thì việc không ghép XML của bạn với kiểu ngôn ngữ của một thành phần của hệ thống đó có thể buộc bạn phải suy nghĩ về thông điệp thay vì đối tượng, và vì vậy tôi khuyên bạn nên sử dụng kiểu chữ thường và dấu gạch ngang.
Pete Kirkham,

5
Lưu ý rằng 'chữ thường có dấu gạch nối' có một số vấn đề trong XSLT. Cụ thể nó rất dễ dàng để gây nhầm lẫn một nút gọi, nói rằng, 'năm-từ-tuổi' với một công thức 'năm - tuổi' (ví dụ trừ tuổi từ năm)
Richard Kennard

3
@RichardKennard Có phải sự nhầm lẫn đó chỉ có thể ở cấp độ con người? Đối với xslt, các dấu cách bắt buộc (?) Xung quanh toán tử cung cấp sự phân biệt rõ ràng và rõ ràng, đúng không?
Karl Kieninger

1
@KarlKieninger điều đó đúng, nhưng sự nhầm lẫn ở cấp độ con người là một mối quan tâm đáng kể, IMHO. Xem câu trả lời mở rộng của tôi bên dưới.
Richard Kennard 21/09/13

64

Điều đó không quan trọng, nhưng tôi luôn là một phần của PascalCase cho các phần tử và camelCase cho các thuộc tính:

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

31

Không có khuyến nghị chính thức.

Vì XML được thiết kế với hai mục đích là lưu giữ tài liệutrao đổi thông tin giữa các hệ thống khác nhau , nên nó được thiết kế để có thể phù hợp với các ứng dụng sử dụng nó.

Vì vậy, .Net XML có xu hướng sử dụng Mô hình thích hợp (nhân chứng XAML), trong khi các XML khác sẽ sử dụng Vỏ bọc camel, python_conventions, dot.naming và thậm chí COBOL-CONVENTIONS. W3C có vẻ thích chữ thường-có-dấu gạch ngang-khá-a-bit (ví dụ XSLT) hoặc justlowercasewordssmashedtogether (ví dụ MathML).

Tôi thích tất cả các chữ thường và không có dấu gạch dưới, vì điều đó có nghĩa là ít sử dụng phím [Shift] hơn và các ngón tay của tôi hơi lười biếng. :)


2
Có vẻ như nếu nó có mục đích "trao đổi thông tin" thì một tiêu chuẩn cho các quy ước đặt tên sẽ hoàn toàn được mong muốn. Điều này cũng sẽ áp dụng cho bất kỳ tài liệu nào được sử dụng bởi nhiều hơn một triển khai cụ thể (ví dụ: đó không phải là các bản tuần tự hóa một lần).

25

Để thêm vào câu trả lời của Metro Smurf.

Mô hình Trao đổi Thông tin Quốc gia (NIEM: http://en.wikipedia.org/wiki/National_Information_Exchange_Model ) cho biết sử dụng:

  • CamelCase trên (PascalCase) cho các phần tử.
  • (thấp hơn) camelCase cho các thuộc tính.

NIEM là một lựa chọn tốt khi bạn muốn tuân theo một số tiêu chuẩn.


1
Đây là tài liệu NIEM nơi họ mô tả các quy ước đặt tên cho các thuộc tính và phần tử: niem.gov/documentsdb/Documents/Technical/NIEM-NDR-1-3.pdf
e1i45,

Tôi biết nó đã cũ, nhưng liên kết trên đã bị hỏng, nhưng liên kết này dường như đã cập nhật chi tiết liên quan đến quy ước NIEM cho Elements / Attrubutes: reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

Để mở rộng nhận xét của tôi ở trên : việc sử dụng 'chữ thường với dấu gạch nối' có một số vấn đề trong XSLT. Cụ thể, rất dễ nhầm lẫn một nút có tên, chẳng hạn như 'năm từ tuổi' với công thức 'năm - tuổi' (ví dụ: trừ tuổi cho năm).

Như @KarlKieninger đã chỉ ra, đây chỉ là vấn đề ở cấp độ con người chứ không phải đối với trình phân tích cú pháp XSLT. Tuy nhiên, vì điều này thường sẽ không tạo ra lỗi , nên việc sử dụng 'chữ thường với dấu gạch nối' làm tiêu chuẩn sẽ gặp rắc rối, IMHO.

Một số ví dụ thích hợp:

<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

Trong đoạn mã trên, bạn phải đặt ít nhất một khoảng trắng trước toán tử trừ, nhưng không có yêu cầu như vậy đối với toán tử cộng.

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

Nhưng hãy lưu ý cách đọc khó hiểu ở trên!

<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

Sự hiện diện của một khoảng trắng duy nhất sẽ thay đổi kết quả ở trên, nhưng không có biến thể nào là lỗi.


3
Đã bán. Ngoài ra, công cụ tạo mã MS .NET (xsd.exe) sẽ chỉ đơn giản là bỏ dấu gạch nối khi nó tạo các lớp deserialization. Vì vậy, thay vào đó, nếu các thuộc tính như "alpha-beta", bạn nhận được "alphabeta". Vì vậy, không những tên không dịch chính xác mà còn khó đọc hơn. Và nếu bạn cần xây dựng xml với dấu gạch nối MS SQL cũng là một vấn đề. Những thứ cụ thể của MS không nên quy định một tiêu chuẩn, nhưng nó được sử dụng rộng rãi đến mức tôi nghĩ nó có thể được coi là một sự cân nhắc. Và nó hướng tôi đến chữ hoa thường hoặc chữ hoa hỗn hợp được phân định bằng gạch dưới.
Karl Kieninger

1
Có vẻ như XSD.exe hiện thêm XmlElementAttribute vào hầu hết các thuộc tính và nếu có dấu gạch nối, nó sẽ thêm chuỗi ElementName làm tham số đầu tiên một cách rõ ràng. Vấn đề tôi nhận thấy là tùy thuộc vào các thư viện .NET của bạn, điều này có thể không thành vấn đề - phần tử vẫn sẽ không deserialize trên một số hệ thống. Nó hoạt động trong VS2012 trên Win7, nhưng không chạy dưới dạng EXE trên Máy chủ 2008.
David Storfer

13

Xem Quy tắc thiết kế và đặt tên XML UN / CEFACT Đặc điểm kỹ thuật Phiên bản 3.0 trang 23 để biết một số quy tắc ví dụ được sử dụng trong một số tiêu chuẩn.

Chi tiết cụ thể (từ trang 23 của Phiên bản 3.0 ngày 17 tháng 12 năm 2009):

  • LowerCamelCase (LCC) PHẢI được sử dụng để đặt tên cho các thuộc tính.
  • UpperCamelCase (UCC) PHẢI được sử dụng để đặt tên cho các phần tử và kiểu.
  • Tên phần tử, thuộc tính và kiểu PHẢI ở dạng số ít trừ khi bản thân khái niệm là số nhiều.

( liên kết khác, trang Thụy Điển )


2
-1: liên kết của bạn bị hỏng - có lẽ đó là một URL nội bộ? Vui lòng sửa nó, và tôi sẽ xóa phiếu phản đối.
John Saunders

3
Mặc dù chắc chắn là thú vị, nhưng tài liệu được trích dẫn tại phần / trang cụ thể này thiết lập các quy tắc cho các Lược đồ XML , không phải cho các tài liệu phân tích cú pháp / xml tuân theo lược đồ này. Đây là hai điều khác nhau.
MrCC

Đối với bất kỳ ai đang thắc mắc sự khác biệt giữa LowerCamelCase và UpperCamelCase: mySettingName là một ví dụ về LowerCamelCase (có thể thông minh hơn khi gọi LowerCamelCase) và MySettingName là một ví dụ của UpperCamelCase.
Jinlye


4

Mục đích ban đầu cho cách viết hoa XML là chữ thường với dấu gạch nối. Nó phân biệt chữ hoa chữ thường và không yêu cầu bạn tuân theo quy ước đó - vì vậy bạn có thể làm bất cứ điều gì bạn muốn. Tôi không có trích dẫn, xin lỗi.


1

Tôi sẽ không nói HTML "chính tắc" sử dụng chữ hoa. Tôi nghĩ rằng chữ hoa ban đầu được sử dụng để phân tách HTML khỏi nội dung một cách trực quan dễ dàng hơn. Với việc tô sáng cú pháp ngày nay, điều đó là không cần thiết.

Tôi chuyển sang viết thường, có dấu gạch ngang nếu cần (nhập nhanh hơn). Trường hợp trộn trong XML chỉ cảm thấy sai đối với tôi.


HTML không phân biệt chữ hoa chữ thường. Đây không phải là XML / XHTML giống nhau.

-2

Trường hợp lạc đà nhận được phiếu bầu của tôi.

Đối với các ví dụ được trích dẫn có lẽ câu hỏi này có thể đến từ liên kết mà mọi người trích dẫn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.