요소 이름에 대한 대소 문자 규칙?


120

XML의 요소 대 / 소문자에 대한 공식적인 권장 사항이 있습니까?

XHTML이 소문자 요소 이름을 사용한다는 것을 알고 있습니다 (정규적으로 대문자를 사용하지만 대소 문자를 구분하지 않는 HTML과는 반대입니다).

하지만 저는 일반적인 콘텐츠를위한 XML에 대해 이야기하고 있습니다.

소문자 :

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

낙타 케이스 :

<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

W3C에서 시작된 대부분의 XML 표준은 하이픈과 함께 소문자를 사용하는 경향이 있습니다.

W3C 표준이 권장하는 플랫폼 중립 문서의 형식으로 XML을 보는 것과 XML을 플랫폼 특정 개체 그래프의 직렬화로 보는 XAML과 같은 언어 사이에는 철학적 차이가 있습니다.

XML을 플랫폼 중립적 인 문서 형식으로 사용하지 않고 응용 프로그램 별 직렬화로 사용하는 경우에는 신경 쓰지 않고 XML 이름과 플랫폼 별 이름 사이에 1 : 1 대응을하는 것이 좋습니다. 그러나 거의 모든 다른 개체 그래프 형식이 이러한 목적을 위해 XML보다 낫습니다.

그렇다면 XHTML, XSLT, SVG, XProc, RelaxNG 및 나머지에 적합 할 수 있습니다.


7
그렇다면 하이픈이있는 소문자가 권장되거나 권장되지 않음을 의미합니까?
WarFox 2011

9
@WarFox 나는 누구도 공식 추천을하지 않았다고 생각합니다. IME, 상호 운용성을 위해 w3c에서 가져온 형식은 하이픈 스타일 인 경향이 있습니다. Microsoft 및 다른 일부에서 제공되는 형식은 구현에 사용되는 언어의 개체 이름에 대한 구현 및 규칙과 밀접하게 연결되는 경향이 있습니다. XML을 사용하여 시스템을 분리하는 경우 XML을 해당 시스템의 한 구성 요소의 언어 스타일에 연결하지 않으면 객체가 아닌 메시지로 생각하게 될 수 있으므로 소문자와 하이픈 스타일을 권장합니다.
Pete Kirkham 2011

5
'하이픈이있는 소문자'는 XSLT에서 몇 가지 문제가 있습니다. 특히 'year-from-age'라는 노드를 'year-age'공식과 혼동하기 쉽습니다 (예 : year에서 age 빼기)
Richard Kennard

3
@RichardKennard 그 혼란은 인간 수준에서만 가능합니까? xslt의 경우 연산자 주변에 필요한 공백 (?)은 명확하고 명확한 구분을 제공합니다. 맞습니까?
Karl Kieninger 2013-09-18

1
@KarlKieninger 그건 사실이지만 인간 수준에서의 혼란은 IMHO의 중요한 관심사입니다. 아래 확장 답변을 참조하십시오.
Richard Kennard 2013 년

64

그게 중요하지는 않지만 항상 PascalCase for Elements와 camelCase for 속성에 부분적이었습니다.

<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) 또는 그냥 소문자 단어가 함께 스매싱 된 (예 : 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

나는 그것이 오래되었다는 것을 알고 있지만 위의 링크는 깨졌지만이 링크는 Elements / Attrubutes에 대한 NIEM 규칙에 대한 업데이트 된 세부 정보를 가지고있는 것 같습니다 : reference.niem.gov/niem/specification/naming-and-design-rules/…
CajunCoding

13

위의 내 댓글 을 확장하려면 '하이픈이있는 소문자'를 사용하면 XSLT에 몇 가지 문제가 있습니다. 특히 'year-from-age'라는 노드를 'year-age'공식과 혼동하기 쉽습니다 (예 : 연도에서 나이 빼기).

@KarlKieninger가 지적했듯이 이것은 XSLT 파서가 아닌 인간 수준에서만 문제가됩니다. 그러나 이것은 종종 오류를 생성하지 않기 때문에 '하이픈이있는 소문자'를 표준으로 사용하면 문제가 발생합니다.

몇 가지 적절한 예 :

<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)는 역 직렬화 클래스를 만들 때 단순히 하이픈을 삭제합니다. 따라서 대신에 "alpha-beta"와 같은 속성이 있으면 "alphabeta"가 표시됩니다. 따라서 이름이 정확하게 번역되지 않을뿐만 아니라 읽기가 더 어렵습니다. 그리고 MS SQL 하이픈을 사용하여 xml을 빌드해야하는 경우에도 문제가 발생합니다. MS 특정 항목이 표준을 지정해서는 안되지만 고려 사항으로 간주 할 수있을만큼 충분히 광범위하게 사용되고 있습니다. 그리고 그것은 저를 밑줄로 구분 된 소문자 또는 혼합 된 대소 문자로 구분합니다.
Karl Kieninger 2013-10-21

1
이제 XSD.exe가 대부분의 속성에 XmlElementAttribute를 추가하고 하이픈이있는 경우 명시 적으로 ElementName 문자열을 첫 번째 매개 변수로 추가하여 명확하게합니다. 내가 찾은 문제는 .NET 라이브러리에 따라 이것이 중요하지 않을 수 있다는 것입니다. 일부 시스템에서는 요소가 여전히 역 직렬화되지 않습니다. Win7의 VS2012에서는 작동하지만 2008 서버에서는 EXE로 실행되지 않습니다.
David Storfer

13

여러 표준에서 사용되는 몇 가지 예제 규칙 은 UN / CEFACT XML 명명 및 설계 규칙 기술 사양 버전 3.0 페이지 23을 참조하십시오.

세부 사항 (2009 년 12 월 17 일자 버전 3.0의 23 페이지에서) :

  • LowerCamelCase (LCC)는 속성 이름 지정에 사용되어야합니다.
  • UCC (UpperCamelCase)는 요소 및 유형의 이름을 지정하는 데 사용해야합니다 (MUST).
  • 요소, 속성 및 유형 이름은 개념 자체가 복수가 아닌 한 단수 형식이어야합니다.

( 기타 링크, 스웨덴 사이트 )


2
-1 : 링크가 깨졌습니다. 내부 URL일까요? 수정 해 주시면 반대표를 제거하겠습니다.
John Saunders

3
확실히 흥미롭지 만이 특정 섹션 / 페이지에서 인용 된 문서는이 스키마 를 준수하는 파서 / xml 문서가 아니라 XML 스키마에 대한 규칙을 설정 합니다. 이것들은 서로 다른 두 가지입니다.
MrCC

LowerCamelCase와 UpperCamelCase의 차이점이 무엇인지 궁금한 사람을 위해 : mySettingName은 LowerCamelCase (lowerCamelCase를 호출하는 것이 더 현명 할 수 있음)의 예이고 MySettingName은 UpperCamelCase의 예입니다.
Jinlye 2010 년


4

XML 대소 문자의 원래 의도는 하이픈이있는 소문자였습니다. 대소 문자를 구분하며 규칙을 따를 필요가 없으므로 원하는대로 할 수 있습니다. 인용이 없습니다. 죄송합니다.


1

나는 HTML이 "표준 적으로"대문자를 사용한다고 말하지 않을 것이다. 원래 대문자는 HTML을 콘텐츠에서 시각적으로 더 쉽게 분리하는 데 사용되었다고 생각합니다. 요즘에는 구문 강조가 필요하지 않습니다.

필요한 경우 대시를 사용하여 소문자로 이동합니다 (입력 속도도 빠름). XML에서 대소 문자를 섞는 것은 나에게 잘못된 느낌입니다.


HTML은 대소 문자를 구분하지 않습니다. 이것은 동일한 XML / XHTML이 아닙니다.

-2

낙타 사건이 내 투표를받습니다.

인용 된 예와 관련하여 아마도이 질문은 사람들이 인용하는 링크에 올 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.